import dataclasses import pytest 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(MemoryDbEngine()) @pytest.fixture() def settings(): return DummySettings( prop1=DummyObject(1, "2", True), prop2="prop2_new", ) 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" 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_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_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'