"""目録の登録で使う ID・日時の書式(SPEC_02「ID の書式」「スキーマで強制する規則」)."""
from datetime import UTC, datetime, timedelta, timezone
import pytest
from tiasdata.catalog.records import format_id, utc_timestamp
@pytest.mark.parametrize(
("prefix", "number", "expected"),
[("S", 1, "S000001"), ("C", 456, "C000456"), ("S", 999999, "S999999")],
)
def test_format_id_is_prefix_and_six_digits(prefix: str, number: int, expected: str) -> None:
assert format_id(prefix, number) == expected
@pytest.mark.parametrize("number", [0, -1, 1_000_000])
def test_format_id_rejects_out_of_range(number: int) -> None:
with pytest.raises(ValueError):
format_id("S", number)
def test_utc_timestamp_is_seconds_precision_utc() -> None:
moment = datetime(2026, 10, 6, 9, 30, 15, 123456, tzinfo=UTC)
assert utc_timestamp(moment) == "2026-10-06T09:30:15Z"
def test_utc_timestamp_converts_to_utc() -> None:
jst = timezone(timedelta(hours=9))
moment = datetime(2026, 10, 6, 9, 0, 0, tzinfo=jst)
assert utc_timestamp(moment) == "2026-10-06T00:00:00Z"