"""T5.2 写侧 repo 的 schema→DB 形变（纯函数 helper，无 DB）。

DB 行的实际落库由 apps/api 端点测试（fake repo）+ T5.7 E2E（真 pg）覆盖；
这里只钉住 list→dict / str→dict 的转换契约（T5.1 gotcha），防回归。
"""

from __future__ import annotations

from ww_core.domain.character_repo import _arc_to_jsonb, _traits_to_jsonb
from ww_core.domain.world_entity_repo import _rules_to_jsonb


def test_traits_list_wraps_into_jsonb_dict() -> None:
    # Arrange
    traits = ["腹黑", "护短"]
    # Act
    out = _traits_to_jsonb(traits)
    # Assert：DB 列是 JSONB dict，list 包成 {"items":[...]}。
    assert out == {"items": ["腹黑", "护短"]}


def test_traits_empty_list_still_dict_shape() -> None:
    assert _traits_to_jsonb([]) == {"items": []}


def test_arc_str_wraps_into_jsonb_dict() -> None:
    assert _arc_to_jsonb("从孤儿到帝王") == {"text": "从孤儿到帝王"}


def test_rules_list_wraps_into_jsonb_dict() -> None:
    assert _rules_to_jsonb(["禁止跨界传送", "灵力守恒"]) == {"rules": ["禁止跨界传送", "灵力守恒"]}
