shared: implementazione package identity
Continuous Integration / Quality Assurance (push) Canceled after 0s
Continuous Integration / Quality Assurance (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
"""
|
||||
Tests for the Identifier Value Object.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import FrozenInstanceError
|
||||
from uuid import UUID
|
||||
|
||||
import pytest
|
||||
|
||||
from shared.identity import Identifier
|
||||
|
||||
|
||||
def test_new_creates_identifier() -> None:
|
||||
"""A new identifier should contain a valid UUID."""
|
||||
|
||||
# Arrange
|
||||
|
||||
# Act
|
||||
identifier = Identifier.new()
|
||||
|
||||
# Assert
|
||||
assert isinstance(identifier.value, UUID)
|
||||
|
||||
|
||||
def test_from_string_creates_identifier() -> None:
|
||||
"""An identifier can be created from a UUID string."""
|
||||
|
||||
# Arrange
|
||||
value = "550e8400-e29b-41d4-a716-446655440000"
|
||||
|
||||
# Act
|
||||
identifier = Identifier.from_string(value)
|
||||
|
||||
# Assert
|
||||
assert identifier.value == UUID(value)
|
||||
|
||||
|
||||
def test_from_uuid_creates_identifier() -> None:
|
||||
"""An identifier can be created from an existing UUID."""
|
||||
|
||||
# Arrange
|
||||
value = UUID("550e8400-e29b-41d4-a716-446655440000")
|
||||
|
||||
# Act
|
||||
identifier = Identifier.from_uuid(value)
|
||||
|
||||
# Assert
|
||||
assert identifier.value == value
|
||||
|
||||
|
||||
def test_from_string_raises_for_invalid_uuid() -> None:
|
||||
"""Creating an identifier from an invalid UUID should fail."""
|
||||
|
||||
# Arrange
|
||||
value = "invalid-uuid"
|
||||
|
||||
# Act / Assert
|
||||
with pytest.raises(ValueError):
|
||||
Identifier.from_string(value)
|
||||
|
||||
|
||||
def test_identifiers_with_same_value_are_equal() -> None:
|
||||
"""Identifiers with the same UUID should be equal."""
|
||||
|
||||
# Arrange
|
||||
value = UUID("550e8400-e29b-41d4-a716-446655440000")
|
||||
|
||||
# Act
|
||||
first = Identifier.from_uuid(value)
|
||||
second = Identifier.from_uuid(value)
|
||||
|
||||
# Assert
|
||||
assert first == second
|
||||
|
||||
|
||||
def test_identifiers_with_different_values_are_not_equal() -> None:
|
||||
"""Identifiers with different UUIDs should not be equal."""
|
||||
|
||||
# Arrange / Act
|
||||
first = Identifier.new()
|
||||
second = Identifier.new()
|
||||
|
||||
# Assert
|
||||
assert first != second
|
||||
|
||||
|
||||
def test_identifier_is_hashable() -> None:
|
||||
"""Identifiers should be hashable."""
|
||||
|
||||
# Arrange
|
||||
identifier = Identifier.new()
|
||||
|
||||
# Act
|
||||
values = {identifier}
|
||||
|
||||
# Assert
|
||||
assert identifier in values
|
||||
|
||||
|
||||
def test_str_returns_uuid_string() -> None:
|
||||
"""The string representation should match the UUID."""
|
||||
|
||||
# Arrange
|
||||
identifier = Identifier.from_string(
|
||||
"550e8400-e29b-41d4-a716-446655440000",
|
||||
)
|
||||
|
||||
# Act / Assert
|
||||
assert str(identifier) == "550e8400-e29b-41d4-a716-446655440000"
|
||||
|
||||
|
||||
def test_repr_returns_developer_representation() -> None:
|
||||
"""The repr should contain the class name and UUID."""
|
||||
|
||||
# Arrange
|
||||
identifier = Identifier.from_string(
|
||||
"550e8400-e29b-41d4-a716-446655440000",
|
||||
)
|
||||
|
||||
# Act / Assert
|
||||
assert repr(identifier) == "Identifier('550e8400-e29b-41d4-a716-446655440000')"
|
||||
|
||||
|
||||
def test_hex_returns_uuid_hexadecimal() -> None:
|
||||
"""The hexadecimal representation should match the UUID."""
|
||||
|
||||
# Arrange
|
||||
identifier = Identifier.from_string(
|
||||
"550e8400-e29b-41d4-a716-446655440000",
|
||||
)
|
||||
|
||||
# Act / Assert
|
||||
assert identifier.hex == "550e8400e29b41d4a716446655440000"
|
||||
|
||||
|
||||
def test_urn_returns_uuid_urn() -> None:
|
||||
"""The URN representation should match the UUID."""
|
||||
|
||||
# Arrange
|
||||
identifier = Identifier.from_string(
|
||||
"550e8400-e29b-41d4-a716-446655440000",
|
||||
)
|
||||
|
||||
# Act / Assert
|
||||
assert identifier.urn == "urn:uuid:550e8400-e29b-41d4-a716-446655440000"
|
||||
|
||||
|
||||
def test_identifier_is_immutable() -> None:
|
||||
"""Identifiers must be immutable."""
|
||||
|
||||
# Arrange
|
||||
identifier = Identifier.new()
|
||||
|
||||
# Act / Assert
|
||||
with pytest.raises(FrozenInstanceError):
|
||||
object.__setattr__(identifier, "value", UUID(int=0))
|
||||
Reference in New Issue
Block a user