import os import sys import unittest sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) from app import cmhub_models class CMHubModelDisplayTests(unittest.TestCase): def tearDown(self): cmhub_models.clear_model_catalog_cache() def test_alias_label_prefers_display_name_tier_and_points(self): label = cmhub_models.alias_label( { "alias": "image-hq", "display_name": "商品图高质量", "operation_type": "image", "tier": "high_quality", "requires_image": True, "prices": [{"resolution": "1K", "points_cost": 5}], } ) self.assertIn("高质量档", label) self.assertIn("商品图高质量", label) self.assertIn("1K:5点", label) self.assertIn("需参考图", label) self.assertNotIn("OpenAI", label) def test_tier_detection_uses_tags_and_safe_default(self): self.assertEqual( cmhub_models.TIER_ECONOMICAL, cmhub_models.model_tier({"alias": "draft", "tags": ["high-volume", "low-cost"]}), ) self.assertEqual( cmhub_models.TIER_HIGH_QUALITY, cmhub_models.model_tier({"alias": "image-hd"}), ) self.assertEqual(cmhub_models.TIER_DEFAULT, cmhub_models.model_tier({"alias": "image"})) def test_configured_alias_summary_is_user_facing(self): summary = cmhub_models.configured_alias_summary("image-hd") self.assertIn("cmhub 托管高质量档", summary) self.assertIn("生图别名 image-hd", summary) self.assertIn("扣点以返回结果为准", summary) def test_catalog_price_only_accepts_one_unconditional_matching_vision_model(self): models = [ { "alias": "vision-standard", "operation_type": "vision", "requires_image": True, "pricing_status": "priced", "prices": [{"points_cost": 2}], } ] cmhub_models.cache_model_catalog("https://CMHUB.example.com/", models, now=100) cached = cmhub_models.cached_model_catalog( "https://cmhub.example.com", "vision-standard", now=120, ) self.assertEqual("2", cmhub_models.format_points_cost( cmhub_models.unambiguous_points_cost( cached, "vision-standard", "vision", requires_image=True, ) )) def test_catalog_price_rejects_conditional_missing_or_ambiguous_prices(self): base = { "alias": "vision-standard", "operation_type": "vision", "requires_image": True, "pricing_status": "priced", } cases = [ dict(base, prices=[{"resolution": "1K", "points_cost": 2}]), dict(base, prices=[{"points_cost": 2}, {"points_cost": 3}]), dict(base, pricing_status="unpriced", prices=[{"points_cost": 2}]), dict(base, requires_image=False, prices=[{"points_cost": 2}]), dict(base, prices=[{}]), ] for model in cases: with self.subTest(model=model): self.assertIsNone( cmhub_models.unambiguous_points_cost( [model], "vision-standard", "vision", requires_image=True, ) ) cmhub_models.cache_model_catalog( "https://cmhub.example.com", [dict(base, prices=[{"points_cost": 2}])], now=100, ) self.assertIsNone( cmhub_models.cached_model_catalog( "https://cmhub.example.com", "vision-standard", max_age_seconds=20, now=121, ) ) if __name__ == "__main__": unittest.main()