import unittest from server.database.game_quality import GameQualityInput, quality_meets_minimum, rate_game_quality class TestGameQuality(unittest.TestCase): def test_complete_competitive_game_is_high_quality(self): quality = rate_game_quality(GameQualityInput( status="finished", final_turn=80, turn_rows=80, min_turn=1, max_turn=80, valid_moves=80, thinking_rows=80, distinct_moves=4, snake_turn_rows=160, winner_name="PrismBattleSnake", )) self.assertEqual(quality.tier, "high") self.assertGreaterEqual(quality.score, 80) def test_short_but_valid_game_is_not_invalid(self): quality = rate_game_quality(GameQualityInput( status="finished", final_turn=5, turn_rows=5, min_turn=1, max_turn=5, valid_moves=5, thinking_rows=5, distinct_moves=3, snake_turn_rows=10, winner_name="PrismBattleSnake", )) self.assertIn(quality.tier, ("low", "medium")) self.assertIn("short_game", quality.reasons) def test_incomplete_game_is_invalid(self): quality = rate_game_quality(GameQualityInput( status="finished", final_turn=100, turn_rows=10, min_turn=1, max_turn=10, valid_moves=10, thinking_rows=10, distinct_moves=4, snake_turn_rows=20, winner_name=None, )) self.assertEqual(quality.tier, "invalid") self.assertIn("incomplete_turn_sequence", quality.reasons) def test_minimum_tier_order(self): self.assertTrue(quality_meets_minimum("high", "medium")) self.assertTrue(quality_meets_minimum("medium", "medium")) self.assertFalse(quality_meets_minimum("low", "medium")) self.assertFalse(quality_meets_minimum("invalid", "low")) if __name__ == "__main__": unittest.main()