Creating a budget overview from a SuperX export.
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.

156 lines
4.4 KiB

""" Stub file for testing the project """
import pytest
@pytest.fixture
def example_file(example_root):
return example_root / "Verwendungsnachweis_und_Kassenstand_SAP_Zahlen.xlsx"
@pytest.fixture
def example_workbook(example_file):
import openpyxl
yield openpyxl.open(example_file)
def test_check_export_headline():
from superx_budget.superx import _check_export_headline
from superx_budget.exceptions import SuperXParserError
row = ["nomatching header"]
with pytest.raises(SuperXParserError):
_check_export_headline(row)
def test_get_export_metadata_ok():
from superx_budget.superx import _get_export_metadata
from datetime import datetime
value = "Haushaltsjahr: XXX;Stand:31.12.2020;Gruppierung:automatisch"
row = [value]
metadata = _get_export_metadata(row)
assert metadata.account_year == "XXX"
assert metadata.export_date == datetime(2020, 12, 31)
@pytest.mark.parametrize(
"faulty_data",
[
"Haushaltsjahr:XXX;Kein Stand:31.12.2020;Gruppierung:automatisch",
"Kein Haushaltsjahr:XXX;Stand:31.12.2020;Gruppierung:automatisch",
"Kein Haushaltsjahr:XXX;Kein Stand:31.12.2020;Gruppierung:automatisch",
"Haushaltsjahr:XXX;Stand:kein Datum;Gruppierung:automatisch",
"Haushaltsjahr:XXX;Stand:31.12.2020;keine Gruppierung:automatisch",
"Haushaltsjahr:XXX;Stand:31.12.2020;Gruppierung:nicht automatisch",
],
)
def test_get_export_metadata_raises_error(faulty_data):
from superx_budget.superx import _get_export_metadata
row = [faulty_data]
with pytest.raises(
ValueError
): # SuperXParserError is a subclass of ValueError
_get_export_metadata(row)
def test_skip_export_data_until_table_header_ok():
from superx_budget.superx import _skip_export_data_until_table_header
rows = [
[""],
[""],
["Kostenstelle"],
["Daten"],
]
iterator = iter(rows)
_skip_export_data_until_table_header(iterator)
data_line = next(iterator)
assert data_line[0] == "Daten"
def test_skip_export_data_until_table_header_raises_error():
from superx_budget.superx import _skip_export_data_until_table_header
from superx_budget.exceptions import SuperXParserError
rows = [
[""],
[""],
["Keine Kostenstelle"],
["Daten"],
]
iterator = iter(rows)
with pytest.raises(SuperXParserError):
_skip_export_data_until_table_header(iterator)
def test_parse_data_table():
from superx_budget.superx import _parse_data_table
rows = [
["A "] + list("BCDEFGHIJ"),
["" for i in range(10)],
list("qrstuvwxyzX"), # one column more
]
result = _parse_data_table(rows)
first_value, second_value = list(result)
assert first_value.cost_center == "A"
assert first_value.fonds == "B"
assert first_value.acutal_value == "J"
assert second_value.cost_center == "q"
assert second_value.acutal_value == "z"
def test_parse_export_data(example_workbook):
from superx_budget.superx import parse_export_data
from datetime import datetime
result = parse_export_data(example_workbook.active)
assert result.account_year == "2020"
assert result.export_date == datetime(2020, 3, 18)
assert len(result.data) == 212
first, last = result.data[0], result.data[-1]
assert first.cost_center == "1110200121"
assert first.fonds == "3310"
assert first.project == "1100000102"
assert first.kind == "1 - Personal"
assert first.budget_year is None
assert first.obligo == 0.01
assert first.expenses == 1000
assert first.revenue_actual == 2000
assert first.revenue_target == 3000
assert first.acutal_value == 4000
assert last.cost_center == "1110200121"
assert last.fonds == "1123"
assert last.project == "8200062807"
assert last.kind == "KASSENSTAND zum Ende des Betrachungszeitraums"
assert last.budget_year is None
assert last.obligo == 236
assert last.expenses == 1236
assert last.revenue_actual == 2236
assert last.revenue_target == 3236
assert last.acutal_value == 4236
def test_parse_exported_file(example_file):
from superx_budget.superx import parse_exported_file
result = parse_exported_file(example_file)
first = result.data[0]
assert len(result.data) == 212
assert first.cost_center == "1110200121"
assert first.fonds == "3310"
assert first.project == "1100000102"
assert first.kind == "1 - Personal"