"""Tests for analysis service.""" import pytest from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from app.analysis.service import AnalysisService from app.db import Base from app.models import Defect, ExperimentRun, PromptTemplate, PromptTemplateVersion, Result, Sample def get_test_db(): engine = create_engine("sqlite:///:memory:") Base.metadata.create_all(bind=engine) Session = sessionmaker(bind=engine) return Session() def test_compute_metrics_for_run(): db = get_test_db() sample = Sample(repo="r", commit_sha="abc", language="python", diff="diff") defect = Defect( sample=sample, defect_type="null_pointer", language="python", line_start=5, line_end=5, ) db.add(sample) db.commit() from uuid import uuid4 template = PromptTemplate(strategy_id="code_review", level="L1") version = PromptTemplateVersion( template=template, version_number=1, body="", variables_schema={} ) db.add(template) db.commit() run = ExperimentRun( id=uuid4(), experiment_id=uuid4(), sample_id=sample.id, model_id="deepseek", template_version_id=version.id, repeat_index=1, status="done", ) db.add(run) db.flush() result = Result( run_id=run.id, raw_output="- null_pointer", ) db.add(result) db.commit() service = AnalysisService(db) metrics = service.compute_metrics_for_run(str(run.id)) assert metrics["detection_rate"] == 1.0