from datetime import UTC
from uuid import UUID, uuid4

from template_project.application.auth_identity.entity import AuthIdentity, AuthMethod
from template_project.application.user.entity import UserId


def test_auth_identity_factory_creates_valid_identity() -> None:
    user_id = UserId(uuid4())

    identity = AuthIdentity.factory(
        user_id=user_id,
        method=AuthMethod.EMAIL,
        identifier="test@example.com",
        secret_key="hashed_password",
    )

    assert isinstance(identity.id, UUID)
    assert identity.user_id == user_id
    assert identity.method == AuthMethod.EMAIL
    assert identity.identifier == "test@example.com"
    assert identity.secret_key == "hashed_password"  # noqa: S105
    assert identity.deleted_at is None
    assert identity.created_at.tzinfo == UTC


def test_auth_identity_factory_without_secret_key() -> None:
    user_id = UserId(uuid4())

    identity = AuthIdentity.factory(
        user_id=user_id,
        method=AuthMethod.YANDEX,
        identifier="yandex_id_123",
    )

    assert identity.secret_key is None
