from sqlalchemy import create_engine from sqlalchemy.orm import Session from modelforge_api.persistence.models import ( Base, Capability, CapabilityContract, Project, ProjectBinding, ) from modelforge_api.services.manifest_registry import ManifestRegistry from modelforge_api.services.project_registry import sync_project_registry def test_project_registry_materializes_only_real_contracts_and_is_idempotent() -> None: engine = create_engine("sqlite+pysqlite:///:memory:") Base.metadata.create_all(engine) with Session(engine) as session: capability = Capability(key="rag.embedding", description="test") session.add(capability) session.flush() session.add( CapabilityContract( capability_id=capability.id, version=1, input_schema={}, output_schema={}, contract={}, upgrade_class="requires_reindex", ) ) session.commit() first = sync_project_registry(session, ManifestRegistry()) second = sync_project_registry(session, ManifestRegistry()) assert first.projects_created == 3 assert first.bindings_created == 1 assert first.unavailable_contracts assert second.projects_created == 0 assert second.bindings_created == 0 assert session.query(Project).count() == 3 assert session.query(ProjectBinding).count() == 1