107 lines
4.1 KiB
Python
107 lines
4.1 KiB
Python
import os
|
||
import sys
|
||
import unittest
|
||
from types import SimpleNamespace
|
||
|
||
sys.path.insert(0, os.path.dirname(__file__))
|
||
|
||
from app import product_suite
|
||
|
||
|
||
class ProductSuiteTests(unittest.TestCase):
|
||
def test_defaults_and_per_image_total(self):
|
||
settings = product_suite.default_suite_settings()
|
||
|
||
self.assertEqual(["白底图", "场景图", "卖点图"], product_suite.category_order(settings))
|
||
self.assertEqual(5, product_suite.suite_total_count(settings, 3))
|
||
|
||
settings["per_image_primary"] = True
|
||
|
||
self.assertEqual(13, product_suite.suite_total_count(settings, 3))
|
||
|
||
def test_custom_category_validation_and_normalization(self):
|
||
self.assertEqual("分类名称不能为空", product_suite.suite_name_error(""))
|
||
self.assertEqual("分类名称不能包含空格", product_suite.suite_name_error("使用 场景"))
|
||
self.assertEqual("分类名称不能超过10个字", product_suite.suite_name_error("一二三四五六七八九十甲"))
|
||
self.assertEqual("分类名称已存在", product_suite.suite_name_error("场景图", {"场景图"}))
|
||
|
||
settings = product_suite.normalize_suite_settings(
|
||
{
|
||
"ratio": "3:4",
|
||
"categories": {"白底图": 2, "场景图": 0, "卖点图": 1, "尺寸图": 2},
|
||
"custom_category_order": ["尺寸图"],
|
||
}
|
||
)
|
||
|
||
self.assertEqual("3:4", settings["ratio"])
|
||
self.assertEqual(["白底图", "场景图", "卖点图", "尺寸图"], product_suite.category_order(settings))
|
||
self.assertEqual(5, product_suite.suite_total_count(settings, 1))
|
||
|
||
def test_recent_settings_only_keep_allowed_dropdown_values(self):
|
||
self.assertEqual(
|
||
{
|
||
"platform": "Shopee",
|
||
"country": "中国台湾",
|
||
"language": "繁体中文",
|
||
"ratio": "1:1",
|
||
},
|
||
product_suite.last_suite_settings(
|
||
{
|
||
"platform": "未知平台",
|
||
"country": "未知站点",
|
||
"language": "未知语言",
|
||
"ratio": "2:3",
|
||
"per_image_primary": True,
|
||
"categories": {"白底图": 9},
|
||
}
|
||
),
|
||
)
|
||
selected = product_suite.last_suite_settings(
|
||
{
|
||
"platform": "Amazon",
|
||
"country": "新加坡",
|
||
"language": "英文",
|
||
"ratio": "4:3",
|
||
}
|
||
)
|
||
self.assertEqual("Amazon", selected["platform"])
|
||
self.assertEqual("新加坡", selected["country"])
|
||
self.assertEqual("英文", selected["language"])
|
||
self.assertEqual("4:3", selected["ratio"])
|
||
|
||
def test_job_specs_include_selected_context_and_source_assignment(self):
|
||
settings = product_suite.default_suite_settings()
|
||
settings.update(
|
||
{
|
||
"platform": "Shopee",
|
||
"country": "中国台湾",
|
||
"language": "繁体中文",
|
||
"ratio": "4:3",
|
||
"per_image_primary": True,
|
||
"categories": {"白底图": 1, "场景图": 1, "卖点图": 0},
|
||
}
|
||
)
|
||
assets = [SimpleNamespace(id=11), SimpleNamespace(id=12)]
|
||
|
||
specs = product_suite.build_job_specs(
|
||
assets,
|
||
"40小时续航,适合通勤",
|
||
settings,
|
||
"51100639510",
|
||
)
|
||
|
||
self.assertEqual(3, len(specs))
|
||
self.assertEqual([11, 11, 12], [spec["source_asset_id"] for spec in specs])
|
||
self.assertEqual(["白底图", "场景图", "场景图"], [spec["job_type"] for spec in specs])
|
||
for spec in specs:
|
||
self.assertIn("平台:Shopee", spec["prompt"])
|
||
self.assertIn("国家地区:中国台湾", spec["prompt"])
|
||
self.assertIn("输出语言:繁体中文", spec["prompt"])
|
||
self.assertIn("图片比例:4:3", spec["prompt"])
|
||
self.assertIn("商品ID:51100639510", spec["prompt"])
|
||
self.assertIn("40小时续航", spec["prompt"])
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|