70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
"""AI 套图规划的均衡覆盖回归测试。"""
|
||
from __future__ import annotations
|
||
|
||
import sys
|
||
import unittest
|
||
from pathlib import Path
|
||
|
||
SERVER_DIR = Path(__file__).resolve().parents[1]
|
||
if str(SERVER_DIR) not in sys.path:
|
||
sys.path.insert(0, str(SERVER_DIR))
|
||
|
||
from services.planner import _balanced_items
|
||
|
||
|
||
def item(kind: str, variant_name: str | None = None) -> dict:
|
||
return {
|
||
"kind": kind,
|
||
"title": kind,
|
||
"detail": "",
|
||
"prompt_hint": "",
|
||
"count": 1,
|
||
"variant_name": variant_name,
|
||
}
|
||
|
||
|
||
class BalancedPlanTests(unittest.TestCase):
|
||
def test_many_skus_do_not_crowd_out_core_image_types(self) -> None:
|
||
variants = ["黑色", "白色", "蓝色", "粉色", "绿色"]
|
||
plan = _balanced_items(
|
||
[item("white_bg", variant) for variant in variants],
|
||
variants,
|
||
{"params": [{"key": "尺寸", "value": "30 × 20 × 10 cm"}]},
|
||
None,
|
||
budget=15,
|
||
)
|
||
|
||
self.assertLessEqual(sum(p["count"] for p in plan if p["kind"] == "white_bg"), 2)
|
||
self.assertTrue(any(p["kind"] == "lifestyle" for p in plan))
|
||
self.assertTrue(any(p["kind"] == "material" for p in plan))
|
||
self.assertTrue(any(p["kind"] == "size_chart" for p in plan))
|
||
|
||
def test_does_not_add_size_chart_without_dimensions(self) -> None:
|
||
plan = _balanced_items(
|
||
[item("white_bg", "黑色")],
|
||
["黑色", "白色"],
|
||
{"params": [{"key": "规格", "value": "标准款"}, {"key": "材质", "value": "涤纶"}]},
|
||
None,
|
||
budget=15,
|
||
)
|
||
|
||
self.assertFalse(any(p["kind"] == "size_chart" for p in plan))
|
||
self.assertTrue(any(p["kind"] == "lifestyle" for p in plan))
|
||
self.assertTrue(any(p["kind"] == "material" for p in plan))
|
||
|
||
def test_explicit_every_sku_requirement_is_preserved(self) -> None:
|
||
variants = ["黑色", "白色", "蓝色"]
|
||
plan = _balanced_items(
|
||
[item("white_bg", variant) for variant in variants],
|
||
variants,
|
||
{},
|
||
"每个 SKU 都单独出一张白底图",
|
||
budget=15,
|
||
)
|
||
|
||
self.assertEqual(sum(p["count"] for p in plan if p["kind"] == "white_bg"), 3)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|