109 lines
3.2 KiB
Python
109 lines
3.2 KiB
Python
import os.path
|
|
|
|
import pytest
|
|
|
|
from core.dbengine import DbException
|
|
from core.settings_management import DummyDbEngine
|
|
from core.settings_objects import BudgetTrackerSettings
|
|
|
|
settings_file = DummyDbEngine().db_path
|
|
|
|
FAKE_USER_ID = "FakeUserId"
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def setup_and_finalize():
|
|
if os.path.exists(settings_file):
|
|
os.remove(settings_file)
|
|
|
|
yield
|
|
|
|
if os.path.exists(settings_file):
|
|
os.remove(settings_file)
|
|
|
|
|
|
@pytest.fixture()
|
|
def engine():
|
|
return DummyDbEngine()
|
|
|
|
|
|
def test_i_can_save_and_load(engine):
|
|
obj = BudgetTrackerSettings(
|
|
spread_sheet="spread_sheet",
|
|
col_row_num="row_number",
|
|
col_project="project",
|
|
col_owner="owner",
|
|
col_capex="capex",
|
|
col_details="details",
|
|
col_supplier="supplier",
|
|
col_budget_amt="budget",
|
|
col_actual_amt="actual",
|
|
col_forecast5_7_amt="forecast5_7",
|
|
)
|
|
|
|
engine.save(FAKE_USER_ID, "MyEntry", obj)
|
|
|
|
res = engine.load(FAKE_USER_ID, "MyEntry")
|
|
assert isinstance(res, BudgetTrackerSettings)
|
|
|
|
assert res.spread_sheet == obj.spread_sheet
|
|
assert res.col_row_num == obj.col_row_num
|
|
assert res.col_project == obj.col_project
|
|
assert res.col_owner == obj.col_owner
|
|
assert res.col_capex == obj.col_capex
|
|
assert res.col_details == obj.col_details
|
|
assert res.col_supplier == obj.col_supplier
|
|
assert res.col_budget_amt == obj.col_budget_amt
|
|
assert res.col_actual_amt == obj.col_actual_amt
|
|
assert res.col_forecast5_7_amt == obj.col_forecast5_7_amt
|
|
|
|
|
|
def test_i_can_save_and_modify(engine):
|
|
obj = BudgetTrackerSettings()
|
|
engine.save(FAKE_USER_ID, "MyEntry", obj)
|
|
|
|
obj = BudgetTrackerSettings(
|
|
spread_sheet="modified_spread_sheet",
|
|
col_row_num="modified_row_number",
|
|
col_project="modified_project",
|
|
col_owner="modified_owner",
|
|
col_capex="modified_capex",
|
|
col_details="modified_details",
|
|
col_supplier="modified_supplier",
|
|
col_budget_amt="modified_budget",
|
|
col_actual_amt="modified_actual",
|
|
col_forecast5_7_amt="forecast5_7",
|
|
)
|
|
engine.save(FAKE_USER_ID, "MyEntry", obj)
|
|
|
|
res = engine.load(FAKE_USER_ID, "MyEntry")
|
|
|
|
assert isinstance(res, BudgetTrackerSettings)
|
|
assert res.spread_sheet == obj.spread_sheet
|
|
assert res.col_row_num == obj.col_row_num
|
|
assert res.col_project == obj.col_project
|
|
assert res.col_owner == obj.col_owner
|
|
assert res.col_capex == obj.col_capex
|
|
assert res.col_details == obj.col_details
|
|
assert res.col_supplier == obj.col_supplier
|
|
assert res.col_budget_amt == obj.col_budget_amt
|
|
assert res.col_actual_amt == obj.col_actual_amt
|
|
assert res.col_forecast5_7_amt == obj.col_forecast5_7_amt
|
|
|
|
|
|
def test_i_cannot_load_if_no_setting_file(engine):
|
|
with pytest.raises(DbException) as ex:
|
|
engine.load(FAKE_USER_ID, "MyEntry")
|
|
|
|
assert str(ex.value) == f"Entry 'MyEntry' is not found."
|
|
|
|
|
|
def test_i_cannot_load_if_no_entry_found(engine):
|
|
obj = BudgetTrackerSettings()
|
|
engine.save(FAKE_USER_ID, "AnotherEntry", obj)
|
|
|
|
with pytest.raises(DbException) as ex:
|
|
engine.load(FAKE_USER_ID, "MyEntry")
|
|
|
|
assert str(ex.value) == f"Entry 'MyEntry' is not found."
|