You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.9 KiB
115 lines
2.9 KiB
""" Stub file for testing the project |
|
|
|
There are three predefined ways to run tests: |
|
|
|
make test: |
|
runs only unit tests, that are not marked with "fun" (for functional test) |
|
in a random order. If a test failed before, only the failed tests will be |
|
run. This is intended to be the default testing method while developing. |
|
|
|
make testall: |
|
runs unit tests and functional tests in random order. Will give a complete |
|
overview of the test suite. |
|
|
|
make coverage: |
|
runs only tests marked with "fun" (for functional tests) and generates a |
|
coverage report for the test run. The idea is to check the test coverage |
|
only on functinal tests to see if a) everything is as much covered as |
|
possible and b) to find dead code that is not called in end-to-end tests. |
|
|
|
all three test strategies will run "make lint" before to catch easily made |
|
mistakes. |
|
""" |
|
|
|
import pytest |
|
|
|
|
|
@pytest.fixture |
|
def root_dir(request): |
|
import pathlib |
|
|
|
return pathlib.Path(request.path).parent |
|
|
|
|
|
def test_open_file(root_dir): |
|
from bs4 import BeautifulSoup |
|
|
|
from xinvoice import open_invoice |
|
|
|
result = open_invoice(root_dir / "carl-roth-1.xml") |
|
|
|
assert isinstance(result, BeautifulSoup) |
|
|
|
|
|
@pytest.mark.parametrize( |
|
"file_name, recipient", [("carl-roth-1.xml", "Calvino")] |
|
) |
|
def test_get_recipient_with_name(root_dir, file_name, recipient): |
|
from xinvoice import open_invoice, get_recipient |
|
|
|
soup = open_invoice(root_dir / file_name) |
|
|
|
result = get_recipient(soup) |
|
|
|
assert recipient in result |
|
|
|
|
|
@pytest.mark.parametrize("file_name", ["fisher-1.xml"]) |
|
def test_get_recipient_without_name(root_dir, file_name): |
|
from xinvoice import open_invoice, get_recipient |
|
|
|
soup = open_invoice(root_dir / file_name) |
|
|
|
result = get_recipient(soup) |
|
|
|
assert result is None |
|
|
|
|
|
@pytest.mark.parametrize( |
|
"file_name, expected_items", |
|
[ |
|
("carl-roth-1.xml", ["Schwefelsäure 96 %"]), |
|
("fisher-1.xml", ["MTT, 1g, (3(4,5dimethylthiazol2yl) 2,"]), |
|
], |
|
) |
|
def test_get_items(root_dir, file_name, expected_items): |
|
from xinvoice import get_items, open_invoice |
|
|
|
soup = open_invoice(root_dir / file_name) |
|
|
|
result = get_items(soup) |
|
|
|
assert result == expected_items |
|
|
|
|
|
@pytest.mark.parametrize( |
|
"file_name, expected_name", |
|
[ |
|
("carl-roth-1.xml", "Céline"), |
|
("fisher-1.xml", "+++ UNKNOWN +++"), |
|
], |
|
) |
|
def test_get_recipient_short_name(root_dir, file_name, expected_name): |
|
from xinvoice import open_invoice, get_recipient_short_name |
|
|
|
soup = open_invoice(root_dir / file_name) |
|
|
|
result = get_recipient_short_name(soup) |
|
|
|
assert result == expected_name |
|
|
|
|
|
@pytest.mark.parametrize( |
|
"file_name, expected_content", |
|
[ |
|
("carl-roth-1.xml", ["Céline", "Schwefelsäure"]), |
|
("fisher-1.xml", ["UNKNOWN", "MTT"]), |
|
], |
|
) |
|
def test_parse(root_dir, file_name, expected_content): |
|
from xinvoice import parse |
|
|
|
result = parse(root_dir / file_name) |
|
|
|
for part in expected_content: |
|
assert part in result
|
|
|