import pytest from datetime import datetime from app.modules.impl_tracker.application.services import ImplTrackerService from app.modules.project.domain.entities import Project from app.modules.scanner.application.services import ScanService @pytest.fixture def impl_service(): return ImplTrackerService() @pytest.fixture def scan_result(): svc = ScanService() project = Project( id="test", name="test", design_dir="/workspace/arch-design-agent-skill-dashboard/design", code_dir=None, created_at=datetime(2026, 1, 1), ) return svc.scan(project) @pytest.fixture def test_project(): return Project( id="test", name="test", design_dir="/workspace/arch-design-agent-skill-dashboard/design", code_dir=None, created_at=datetime(2026, 1, 1), ) def test_evaluate_no_code_dir(impl_service, test_project, scan_result): progress = impl_service.evaluate(test_project, scan_result) assert len(progress) > 0 assert all(p.percentage == 0.0 for p in progress) assert all(p.source == "auto" for p in progress) def test_get_progress_before_evaluate(impl_service): assert impl_service.get_progress("nonexistent") is None def test_get_progress_after_evaluate(impl_service, test_project, scan_result): impl_service.evaluate(test_project, scan_result) cached = impl_service.get_progress("test") assert cached is not None assert len(cached) > 0 def test_set_manual_progress(impl_service, test_project, scan_result): impl_service.evaluate(test_project, scan_result) impl_service.set_manual_progress("test", "MOD-PROJECT", 75.0) cached = impl_service.get_progress("test") mod_progress = [p for p in cached if p.module_id == "MOD-PROJECT"] assert len(mod_progress) == 1 assert mod_progress[0].percentage == 75.0 assert mod_progress[0].source == "manual"