First Working version. I can add table
This commit is contained in:
116
tests/test_settingsmanager.py
Normal file
116
tests/test_settingsmanager.py
Normal file
@@ -0,0 +1,116 @@
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from core.settings_management import SettingsManager, DummyDbEngine
|
||||
from core.settings_objects import BudgetTrackerSettings, BudgetTrackerMappings, BUDGET_TRACKER_MAPPINGS_ENTRY
|
||||
|
||||
FAKE_USER_ID = "FakeUserId"
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def manager():
|
||||
return SettingsManager(DummyDbEngine("settings_from_unit_testing.json"))
|
||||
|
||||
|
||||
def test_i_can_save_and_load_settings(manager):
|
||||
settings = BudgetTrackerSettings()
|
||||
manager.save(FAKE_USER_ID, "MyEntry", settings)
|
||||
|
||||
from_db = manager.load(FAKE_USER_ID, "MyEntry")
|
||||
|
||||
assert isinstance(from_db, BudgetTrackerSettings)
|
||||
assert from_db.spread_sheet == settings.spread_sheet
|
||||
assert from_db.col_row_num == settings.col_row_num
|
||||
assert from_db.col_project == settings.col_project
|
||||
assert from_db.col_owner == settings.col_owner
|
||||
assert from_db.col_capex == settings.col_capex
|
||||
assert from_db.col_details == settings.col_details
|
||||
assert from_db.col_supplier == settings.col_supplier
|
||||
assert from_db.col_budget_amt == settings.col_budget_amt
|
||||
assert from_db.col_actual_amt == settings.col_actual_amt
|
||||
assert from_db.col_forecast5_7_amt == settings.col_forecast5_7_amt
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_db_engine():
|
||||
"""Fixture to mock the _db_engine instance."""
|
||||
return MagicMock()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def settings_manager(mock_db_engine):
|
||||
"""Fixture to provide an instance of SettingsManager with a mocked db engine."""
|
||||
return SettingsManager(engine=mock_db_engine)
|
||||
|
||||
|
||||
def test_get_successful(settings_manager, mock_db_engine):
|
||||
"""Test successful retrieval of a value."""
|
||||
# Arrange
|
||||
session = {"user_id": "user123", "user_email": "user@example.com"}
|
||||
mock_db_engine.get.return_value = "mock_value"
|
||||
|
||||
# Act
|
||||
result = settings_manager.get(session=session, key="theme")
|
||||
|
||||
# Assert
|
||||
assert result == "mock_value"
|
||||
mock_db_engine.get.assert_called_once_with("user@example.com", "user123", "theme")
|
||||
|
||||
|
||||
def test_get_key_error_no_default(settings_manager, mock_db_engine):
|
||||
"""Test KeyError is raised if key doesn't exist and default is NoDefault."""
|
||||
# Arrange
|
||||
session = {"user_id": "user123", "user_email": "user@example.com"}
|
||||
mock_db_engine.get.side_effect = KeyError # Simulate missing key
|
||||
|
||||
# Act & Assert
|
||||
with pytest.raises(KeyError):
|
||||
settings_manager.get(session=session, key="theme")
|
||||
|
||||
|
||||
def test_get_key_error_with_default(settings_manager, mock_db_engine):
|
||||
"""Test default value is returned if key doesn't exist and default is provided."""
|
||||
# Arrange
|
||||
session = {"user_id": "user123", "user_email": "user@example.com"}
|
||||
mock_db_engine.get.side_effect = KeyError # Simulate missing key
|
||||
|
||||
# Act
|
||||
result = settings_manager.get(session=session, key="theme", default="default_value")
|
||||
|
||||
# Assert
|
||||
assert result == "default_value"
|
||||
mock_db_engine.get.assert_called_once_with("user@example.com", "user123", "theme")
|
||||
|
||||
|
||||
def test_get_key_none(settings_manager, mock_db_engine):
|
||||
"""Test behavior when key is None."""
|
||||
# Arrange
|
||||
session = {"user_id": "user123", "user_email": "user@example.com"}
|
||||
mock_db_engine.get.return_value = {"example_key": "example_value"}
|
||||
|
||||
# Act
|
||||
result = settings_manager.get(session=session, key=None)
|
||||
|
||||
# Assert
|
||||
assert result == {"example_key": "example_value"}
|
||||
mock_db_engine.get.assert_called_once_with("user@example.com", "user123", None)
|
||||
#
|
||||
# def test_i_can_save_and_load_mapping_settings(manager):
|
||||
# """
|
||||
# I test 'BudgetTrackerMappings' because there is an object inside an object
|
||||
# :param manager:
|
||||
# :return:
|
||||
# """
|
||||
# settings = BudgetTrackerMappings(mappings=[
|
||||
# BudgetTrackerMappings.Mapping(1, "p1", "o1", "d1", "s1", "l1_1", "l2_1", "l3_1", 0),
|
||||
# BudgetTrackerMappings.Mapping(1, "p2", "o2", "d2", "s2", "l1_2", "l2_2", "l3_2", 10)])
|
||||
#
|
||||
# manager.save(FAKE_USER_ID, BUDGET_TRACKER_MAPPINGS_ENTRY, settings)
|
||||
# from_db = manager.load(FAKE_USER_ID, BUDGET_TRACKER_MAPPINGS_ENTRY)
|
||||
#
|
||||
# assert isinstance(from_db, BudgetTrackerMappings)
|
||||
# assert len(from_db.mappings) == 2
|
||||
# assert isinstance(from_db.mappings[0], BudgetTrackerMappings.Mapping)
|
||||
# assert from_db.mappings[0].col_project == "p1"
|
||||
# assert from_db.mappings[1].col_project == "p2"
|
||||
Reference in New Issue
Block a user