RSCE / tests /test_json_export.py
LP1205's picture
Deploy RSCE backend to Hugging Face Space
5e952bb
Raw
History Blame Contribute Delete
3.38 kB
import json
import os
import uuid
from src.models.claim import Claim, ClaimType, Polarity, StudyDesign
from src.models.contradiction import ContradictionPair, ContradictionType
from src.models.report import SynthesisReport
from src.presentation.json_export import export_report_to_json, generate_query_slug
def test_generate_query_slug():
query = "Does metformin reduce breast cancer risk?"
slug = generate_query_slug(query)
assert slug == "does_metformin_reduce_breast_cancer_risk"
query_with_special = "AMPK, mTOR & Cancer: A Review!"
slug_special = generate_query_slug(query_with_special)
assert slug_special == "ampk_mtor_cancer_a_review"
def test_export_report_to_json(tmp_path):
claim_a = Claim(
id=uuid.uuid4(),
text="Metformin reduces breast cancer risk.",
paper_id="12345",
authors=["John Smith"],
year=2023,
confidence_score=1.0,
claim_type=ClaimType.CAUSAL,
polarity=Polarity.NEGATIVE,
population="humans",
context="general",
quote_anchor="reduced breast cancer risk",
study_design=StudyDesign.RCT
)
claim_b = Claim(
id=uuid.uuid4(),
text="Metformin increases breast cancer risk.",
paper_id="67890",
authors=["Jane Doe"],
year=2024,
confidence_score=1.0,
claim_type=ClaimType.CAUSAL,
polarity=Polarity.POSITIVE,
population="humans",
context="general",
quote_anchor="increased breast cancer risk",
study_design=StudyDesign.RCT
)
contradiction = ContradictionPair(
claim_a=claim_a,
claim_b=claim_b,
contradiction_score=0.95,
contradiction_type=ContradictionType.DIRECTION_REVERSAL,
explanation="Claim A decreases risk, Claim B increases risk.",
scope_note="No scope mismatch, both human populations.",
is_genuine=True
)
report = SynthesisReport(
summary="Metformin has contradictory effects on breast cancer risk based on recent RCTs.",
contradictions=[contradiction],
consensus_scores={},
total_papers=2,
total_claims=2,
metadata={"time_elapsed": 4.5, "cost_estimate": 0.05}
)
# Export to temporary directory path
saved_file_path = export_report_to_json(
report=report,
query="Does metformin reduce breast cancer risk?",
output_dir=str(tmp_path)
)
# Verify file existence
assert os.path.exists(saved_file_path)
assert saved_file_path.endswith(".json")
# Read back and parse JSON
with open(saved_file_path, "r", encoding="utf-8") as f:
data = json.load(f)
# Verify content
assert data["total_papers"] == 2
assert data["total_claims"] == 2
assert data["summary"] == "Metformin has contradictory effects on breast cancer risk based on recent RCTs."
assert len(data["contradictions"]) == 1
saved_contradiction = data["contradictions"][0]
assert saved_contradiction["contradiction_score"] == 0.95
assert saved_contradiction["contradiction_type"] == "DIRECTION_REVERSAL"
assert saved_contradiction["is_genuine"] is True
assert saved_contradiction["claim_a"]["text"] == "Metformin reduces breast cancer risk."
assert saved_contradiction["claim_b"]["text"] == "Metformin increases breast cancer risk."