"""Tests for template model and session persistence.""" from pathlib import Path import pytest from impakt.template.library import TemplateLibrary from impakt.template.model import PlotDefinition, SessionState, TemplateSpec from impakt.template.session import SessionManager class TestTemplateSpec: def test_yaml_round_trip(self): template = TemplateSpec( name="Test Template", version=2, description="A test template", plots=[ PlotDefinition( title="Head Acceleration", channel_patterns=["*HEAD*AC*"], x_cursors=(0.0, 0.1), ) ], default_cfc=1000, criteria=["hic15", "nij"], protocol="euro_ncap", ) yaml_str = template.to_yaml() restored = TemplateSpec.from_yaml(yaml_str) assert restored.name == "Test Template" assert restored.version == 2 assert restored.default_cfc == 1000 assert len(restored.plots) == 1 assert restored.plots[0].channel_patterns == ["*HEAD*AC*"] assert restored.criteria == ["hic15", "nij"] def test_save_and_load(self, tmp_path): template = TemplateSpec(name="Saved Test", version=1) path = tmp_path / "test.yaml" template.save(path) assert path.exists() loaded = TemplateSpec.load(path) assert loaded.name == "Saved Test" class TestSessionState: def test_yaml_round_trip(self): state = SessionState( template_name="my_template", template_version=3, test_path="/data/test_001", overrides={"cfc": "600", "selected": ["ch1", "ch2"]}, ) yaml_str = state.to_yaml() restored = SessionState.from_yaml(yaml_str) assert restored.template_name == "my_template" assert restored.template_version == 3 assert restored.overrides["cfc"] == "600" def test_save_and_load(self, tmp_path): state = SessionState(template_name="test") path = tmp_path / "session.yaml" state.save(path) assert path.exists() loaded = SessionState.load(path) assert loaded.template_name == "test" class TestTemplateLibrary: def test_empty_library(self, tmp_path): lib = TemplateLibrary(tmp_path / "templates") assert lib.list() == [] assert len(lib) == 0 def test_save_and_list(self, tmp_path): lib = TemplateLibrary(tmp_path / "templates") template = TemplateSpec(name="My Template") lib.save(template) assert "my_template" in lib.list() assert len(lib) == 1 def test_get(self, tmp_path): lib = TemplateLibrary(tmp_path / "templates") lib.save(TemplateSpec(name="Getter Test", version=5)) loaded = lib.get("getter_test") assert loaded.name == "Getter Test" assert loaded.version == 5 def test_delete(self, tmp_path): lib = TemplateLibrary(tmp_path / "templates") lib.save(TemplateSpec(name="To Delete")) assert lib.delete("to_delete") assert "to_delete" not in lib.list() def test_get_missing_raises(self, tmp_path): lib = TemplateLibrary(tmp_path / "templates") with pytest.raises(FileNotFoundError): lib.get("nonexistent") class TestSessionManager: def test_create_and_save(self, tmp_path): mgr = SessionManager(tmp_path) mgr.state.template_name = "test_tmpl" mgr.save() assert mgr.has_session assert (tmp_path / ".impakt" / "session.yaml").exists() def test_load_existing(self, tmp_path): # Save mgr1 = SessionManager(tmp_path) mgr1.state.template_name = "saved_tmpl" mgr1.state.overrides = {"key": "value"} mgr1.save() # Load mgr2 = SessionManager(tmp_path) assert mgr2.state.template_name == "saved_tmpl" assert mgr2.state.overrides["key"] == "value" def test_clear(self, tmp_path): mgr = SessionManager(tmp_path) mgr.save() assert mgr.has_session mgr.clear() assert not mgr.has_session