Model/tests/domain/test_postcode.py
2026-05-20 12:57:03 +00:00

48 lines
1.4 KiB
Python

import dataclasses
import pytest
from domain.postcode import Postcode
def test_postcode_uppercases() -> None:
assert Postcode("sw1a1aa").value == "SW1A1AA"
def test_postcode_strips_internal_spaces() -> None:
assert Postcode("sw1a 1aa").value == "SW1A1AA"
def test_postcode_strips_leading_and_trailing_whitespace() -> None:
assert Postcode(" sw1a 1aa ").value == "SW1A1AA"
def test_postcode_strips_tabs_and_newlines() -> None:
# CSV ingestion occasionally introduces stray whitespace characters; the
# canonical form must absorb them just like literal spaces.
assert Postcode("sw1a\t1aa\n").value == "SW1A1AA"
def test_postcode_construction_is_idempotent() -> None:
once = Postcode("sw1a 1aa")
assert Postcode(once.value).value == "SW1A1AA"
def test_postcode_empty_string() -> None:
assert Postcode("").value == ""
def test_postcode_str_returns_canonical_value() -> None:
assert str(Postcode("sw1a 1aa")) == "SW1A1AA"
def test_postcode_equality_ignores_surface_form() -> None:
# Differing case / whitespace sanitise to the same canonical value, so
# the value objects compare equal.
assert Postcode("sw1a 1aa") == Postcode("SW1A1AA")
def test_postcode_is_frozen() -> None:
postcode = Postcode("SW1A1AA")
with pytest.raises(dataclasses.FrozenInstanceError):
postcode.value = "OTHER" # type: ignore[misc]