SciPeerAI-API / tests /test_retraction_checker.py
Abu-Sameer-66
fix: v2.3.4 final version bump
535dd76
Raw
History Blame Contribute Delete
2.91 kB
# tests/test_retraction_checker.py
import pytest
from src.scipeerai.modules.retraction_checker import RetractionChecker
engine = RetractionChecker()
def test_known_retracted_doi_detected():
"""STAP cell paper DOI — critical risk."""
r = engine.analyze(
"This study builds on STAP cell findings "
"doi:10.1038/nature13187 by Obokata et al."
)
assert r.risk_level in ("high", "critical")
def test_lacour_retracted_detected():
"""LaCour political persuasion — known retracted."""
r = engine.analyze(
"Based on LaCour and Green doi:10.1126/science.1254166 "
"we examine political persuasion effects in voters."
)
assert len(r.retracted_found) >= 1
assert r.risk_level == "critical"
def test_clean_paper_no_dois():
"""No DOIs — low risk with informational flag."""
r = engine.analyze(
"This study examined the effect of cognitive "
"behavioral therapy on anxiety disorders in "
"adult patients over a period of twelve weeks."
)
assert r.risk_level == "low"
flag_types = [f.flag_type for f in r.flags]
assert "no_dois_found" in flag_types
def test_retraction_signal_detected():
"""Retraction language in text flagged."""
r = engine.analyze(
"Following the retraction of the original study "
"we conducted a reanalysis of the withdrawn data "
"with corrected methodology and sample sizes here."
)
flag_types = [f.flag_type for f in r.flags]
assert "retraction_language_detected" in flag_types
def test_doi_extraction():
"""DOIs correctly extracted from text."""
r = engine.analyze(
"See Smith et al. doi:10.1038/nature13187 and "
"Jones et al. doi.org/10.1097/00007632-200207150-00020 "
"for background on the methodology used here."
)
assert len(r.dois_found) >= 1
def test_retraction_score_range():
"""Score must be between 0 and 1."""
r = engine.analyze(
"Based on LaCour doi:10.1126/science.1254166 "
"we examine political persuasion in this study."
)
assert 0.0 <= r.retraction_score <= 1.0
def test_flag_structure():
"""Flags have correct required fields."""
r = engine.analyze(
"Based on LaCour doi:10.1126/science.1254166 "
"we examine political persuasion effects here."
)
assert r.flags_count >= 1
flag = r.flags[0]
assert hasattr(flag, 'flag_type')
assert hasattr(flag, 'severity')
assert hasattr(flag, 'description')
assert hasattr(flag, 'evidence')
assert hasattr(flag, 'suggestion')
def test_summary_contains_key_info():
"""Summary mentions DOIs and risk level."""
r = engine.analyze(
"Based on LaCour doi:10.1126/science.1254166 "
"we examine political persuasion effects here."
)
assert "Retraction" in r.summary
assert r.risk_level.upper() in r.summary