| from src.server.services.stats import StatsService | |
| def test_calculate_ai_score_grounded_logic(): | |
| stats = StatsService() | |
| # 1. Test basic quality (Word count based) | |
| assert stats.calculate_ai_score("Very short content") == 50 # < 50 words penalty | |
| long_content = "Word " * 201 # 200+ words to pass all length checks | |
| assert stats.calculate_ai_score(long_content) == 100 | |
| # 2. Test Technical Metadata (Phase 4.6.15 Physical indicators) | |
| meta_fail = {"returncode": 1, "lint_passed": False} | |
| # Length passes (100) - technical penalty (40 + 15) = 45 | |
| score_fail = stats.calculate_ai_score("Word " * 201, meta_fail) | |
| assert score_fail == 45 | |
| meta_pass = {"returncode": 0, "lint_passed": True} | |
| score_pass = stats.calculate_ai_score("Word " * 201, meta_pass) | |
| assert score_pass == 100 | |
| # 3. Test required terms | |
| meta_terms = {"required_terms": ["Archon"]} | |
| # Length passes (100) - Missing keyword (10) = 90 | |
| assert stats.calculate_ai_score("Word " * 201, meta_terms) == 90 | |
| # Length passes (100) + Keyword (0 penalty) = 100 | |
| assert stats.calculate_ai_score("Word " * 201 + " Archon", meta_terms) == 100 | |
| # 4. Test Safety | |
| assert stats.calculate_ai_score("This contains CONFIDENTIAL information." + " Word" * 200) == 50 | |