Files
ozon-seller-kit/server/tests/test_planner.py
T

70 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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()