I can add tables
Refactoring DbEngine Fixing unit tests Fixing unit tests Fixing unit tests Refactored DbManager for datagrid Improving front end performance I can add new table Fixed sidebar closing when clicking on it Fix drag event rebinding, improve listener options, and add debug Prevent duplicate drag event bindings with a dataset flag and ensure consistent scrollbar functionality. Change wheel event listener to passive mode for better performance. Refactor function naming for consistency, and add debug logs for event handling. Refactor Datagrid bindings and default state handling. Updated Javascript to conditionally rebind Datagrid on specific events. Improved Python components by handling empty DataFrame cases and removing redundant code. Revised default state initialization in settings for better handling of mutable fields. Added Rowindex visualisation support Working on Debugger with own implementation of JsonViewer Working on JsonViewer.py Fixed unit tests Adding unit tests I can fold and unfold fixed unit tests Adding css for debugger Added tooltip management Adding debugger functionalities Refactor serializers and improve error handling in DB engine Fixed error where tables were overwritten I can display footer menu Working on footer. Refactoring how heights are managed Refactored scrollbars management Working on footer menu I can display footer menu + fixed unit tests Fixed unit tests Updated click management I can display aggregations in footers Added docker management Refactor input handling and improve config defaults Fixed scrollbars colors Refactored tooltip management Improved tooltip management Improving FilterAll
This commit is contained in:
@@ -1,116 +1,88 @@
|
||||
from unittest.mock import MagicMock
|
||||
import dataclasses
|
||||
|
||||
import pytest
|
||||
|
||||
from core.settings_management import SettingsManager, DummyDbEngine
|
||||
from core.settings_objects import BudgetTrackerSettings, BudgetTrackerMappings, BUDGET_TRACKER_MAPPINGS_ENTRY
|
||||
from core.settings_management import SettingsManager, MemoryDbEngine
|
||||
|
||||
FAKE_USER_ID = "FakeUserId"
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class DummyObject:
|
||||
a: int
|
||||
b: str
|
||||
c: bool
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class DummySettings:
|
||||
prop1: DummyObject
|
||||
prop2: str
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def manager():
|
||||
return SettingsManager(DummyDbEngine("settings_from_unit_testing.json"))
|
||||
return SettingsManager(MemoryDbEngine())
|
||||
|
||||
|
||||
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 settings():
|
||||
return DummySettings(
|
||||
prop1=DummyObject(1, "2", True),
|
||||
prop2="prop2_new",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_db_engine():
|
||||
"""Fixture to mock the _db_engine instance."""
|
||||
return MagicMock()
|
||||
def test_i_can_save_and_load_settings(session, manager, settings):
|
||||
manager.save(session, "MyEntry", settings)
|
||||
|
||||
from_db = manager.load(session, "MyEntry")
|
||||
|
||||
assert isinstance(from_db, DummySettings)
|
||||
assert from_db.prop1.a == 1
|
||||
assert from_db.prop1.b == "2"
|
||||
assert from_db.prop1.c == True
|
||||
assert from_db.prop2 == "prop2_new"
|
||||
|
||||
|
||||
@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_i_can_have_two_entries(session, manager, settings):
|
||||
manager.save(session, "MyEntry", settings)
|
||||
manager.save(session, "MyOtherEntry", settings)
|
||||
|
||||
from_db = manager.load(session, "MyEntry")
|
||||
from_db_other = manager.load(session, "MyOtherEntry")
|
||||
|
||||
assert isinstance(from_db, DummySettings)
|
||||
assert isinstance(from_db_other, DummySettings)
|
||||
|
||||
|
||||
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_i_can_put_many_items_dict(session, manager):
|
||||
manager.save(session, "TestEntry", {})
|
||||
|
||||
items = {
|
||||
'key1': 'value1',
|
||||
'key2': 'value2',
|
||||
'key3': 'value3'
|
||||
}
|
||||
manager.put_many(session, "TestEntry", items)
|
||||
|
||||
loaded = manager.load(session, "TestEntry")
|
||||
assert loaded['key1'] == 'value1'
|
||||
assert loaded['key2'] == 'value2'
|
||||
assert loaded['key3'] == 'value3'
|
||||
|
||||
|
||||
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"
|
||||
def test_i_can_put_many_items_list(session, manager):
|
||||
manager.save(session, "TestEntry", {})
|
||||
|
||||
items = [
|
||||
('key1', 'value1'),
|
||||
('key2', 'value2'),
|
||||
('key3', 'value3')
|
||||
]
|
||||
manager.put_many(session, "TestEntry", items)
|
||||
|
||||
loaded = manager.load(session, "TestEntry")
|
||||
assert loaded['key1'] == 'value1'
|
||||
assert loaded['key2'] == 'value2'
|
||||
assert loaded['key3'] == 'value3'
|
||||
|
||||
Reference in New Issue
Block a user