Newer
Older
TIASDataHub / tests / catalog / test_records.py
"""目録の登録で使う 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"