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."