62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
"""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
|