122 lines
4.8 KiB
Python
122 lines
4.8 KiB
Python
"""Unit tests for DataServicesManager."""
|
|
import pandas as pd
|
|
|
|
|
|
class TestDataServicesManagerServiceLifecycle:
|
|
def test_i_can_create_a_service(self, dsm):
|
|
"""create_service() returns a DataService accessible by grid_id."""
|
|
service = dsm.create_service("ns.tbl", save_state=False)
|
|
|
|
assert service is not None
|
|
assert service.get_id() is not None
|
|
assert dsm.get_service(service.get_id()) is service
|
|
|
|
def test_i_can_create_service_with_correct_table_name(self, dsm):
|
|
"""create_service() sets the table_name on the returned DataService.
|
|
|
|
create_service() calls service.set_table_name() internally.
|
|
This test verifies the side effect is applied before returning the service.
|
|
"""
|
|
service = dsm.create_service("ns.my_table", save_state=False)
|
|
|
|
assert service.table_name == "ns.my_table"
|
|
|
|
def test_i_can_create_service_forcing_the_id(self, dsm):
|
|
"""create_service() sets the table_name on the returned DataService.
|
|
|
|
create_service() calls service.set_table_name() internally.
|
|
This test verifies the side effect is applied before returning the service.
|
|
"""
|
|
service = dsm.create_service("ns.my_table", _id="grid_id", save_state=False)
|
|
|
|
assert service.get_id() == "grid_id"
|
|
|
|
def test_i_can_get_a_service_by_grid_id(self, dsm):
|
|
"""get_service() returns the correct service."""
|
|
svc1 = dsm.create_service("ns.t1", _id="g1", save_state=False)
|
|
svc2 = dsm.create_service("ns.t2", _id="g2", save_state=False)
|
|
|
|
assert dsm.get_service("g1") is svc1
|
|
assert dsm.get_service("g2") is svc2
|
|
|
|
def test_i_cannot_get_a_nonexistent_service(self, dsm):
|
|
"""get_service() returns None for unknown grid_id."""
|
|
assert dsm.get_service("does_not_exist") is None
|
|
|
|
def test_i_can_remove_a_service(self, dsm):
|
|
"""remove_service() unregisters the service."""
|
|
service = dsm.create_service("ns.rm", save_state=False)
|
|
dsm.remove_service(service.get_id())
|
|
|
|
assert dsm.get_service(service.get_id()) is None
|
|
|
|
def test_i_can_remove_a_nonexistent_service_without_error(self, dsm):
|
|
"""remove_service() on unknown grid_id does not raise."""
|
|
dsm.remove_service("ghost") # should not raise
|
|
|
|
def test_i_can_restore_a_service(self, dsm):
|
|
"""restore_service() creates and registers a service if not already present."""
|
|
service = dsm.restore_service("grid_restore")
|
|
|
|
assert service is not None
|
|
assert dsm.get_service("grid_restore") is service
|
|
assert service.get_id() == "grid_restore"
|
|
|
|
def test_i_can_restore_existing_service(self, dsm):
|
|
"""restore_service() returns the existing service when already registered."""
|
|
original = dsm.create_service("ns.e", _id="grid_exist", save_state=False)
|
|
restored = dsm.restore_service("grid_exist")
|
|
|
|
assert restored is original
|
|
|
|
|
|
class TestDataServicesManagerFormulaEngine:
|
|
|
|
def test_i_can_get_formula_engine(self, dsm):
|
|
"""get_formula_engine() returns the shared FormulaEngine instance."""
|
|
engine = dsm.get_formula_engine()
|
|
assert engine is not None
|
|
|
|
def test_i_can_verify_shared_formula_engine(self, dsm):
|
|
"""All services share the same FormulaEngine from DataServicesManager."""
|
|
svc1 = dsm.create_service("ns.fe1", save_state=False)
|
|
svc2 = dsm.create_service("ns.fe2", save_state=False)
|
|
|
|
assert svc1.get_formula_engine() is svc2.get_formula_engine()
|
|
assert svc1.get_formula_engine() is dsm.get_formula_engine()
|
|
|
|
def test_i_can_resolve_store_by_table_name(self, dsm):
|
|
"""FormulaEngine resolver finds the DataStore for a given table name."""
|
|
service = dsm.create_service("ns.resolver", save_state=False)
|
|
df = pd.DataFrame({"a": [1, 2]})
|
|
service.load_dataframe(df)
|
|
|
|
store = dsm._resolve_store_for_table("ns.resolver")
|
|
|
|
assert store is service.get_store()
|
|
|
|
def test_i_can_resolve_correct_store_among_multiple_services(self, dsm):
|
|
"""_resolve_store_for_table() identifies the right store when multiple services are registered.
|
|
|
|
The resolver iterates over all registered services and must return the store
|
|
whose service has a matching table_name, not another service's store.
|
|
"""
|
|
svc_a = dsm.create_service("ns.table_a", save_state=False)
|
|
svc_b = dsm.create_service("ns.table_b", save_state=False)
|
|
|
|
df = pd.DataFrame({"x": [10, 20]})
|
|
svc_a.load_dataframe(df)
|
|
svc_b.load_dataframe(df.copy())
|
|
|
|
store_a = dsm._resolve_store_for_table("ns.table_a")
|
|
store_b = dsm._resolve_store_for_table("ns.table_b")
|
|
|
|
assert store_a is svc_a.get_store()
|
|
assert store_b is svc_b.get_store()
|
|
assert store_a is not store_b
|
|
|
|
def test_i_cannot_resolve_unknown_table(self, dsm):
|
|
"""FormulaEngine resolver returns None for an unknown table name."""
|
|
result = dsm._resolve_store_for_table("unknown.table")
|
|
assert result is None
|