from datetime import date
from uuid import UUID

import pytest

from app.domain.models.Arkivuttrekk import Arkivuttrekk, ArkivuttrekkStatus, ArkivuttrekkType
from app.domain.models.Depotinstitusjoner import DepotinstitusjonerEnum
from app.routers.dto.Arkivuttrekk import ArkivuttrekkCreate as Arkivuttrekk_dto


@pytest.fixture
def _arkivuttrekk_domain() -> Arkivuttrekk:
    return Arkivuttrekk(
        id_=None,
        obj_id=UUID("df53d1d8-39bf-4fea-a741-58d472664ce2"),
        status=ArkivuttrekkStatus.OPPRETTET,
        type_=ArkivuttrekkType.NOARK5,
        tittel="tittel",
        sjekksum_sha256="2afeec307b0573339b3292e27e7971b5b040a5d7e8f7432339cae2fcd0eb936a",
        avgiver_navn="<NAME>",
        avgiver_epost="<EMAIL>",
        koordinator_epost="<EMAIL>",
        metadatafil_id=1,
        arkiv_startdato=date.fromisoformat("1864-04-10"),
        arkiv_sluttdato=date.fromisoformat("1900-05-12"),
        storrelse=45620,
        avtalenummer="01/12345",
        depotinstitusjon=DepotinstitusjonerEnum("ARKIVVERKET"),
        opprettet=None,
        endret=None
    )


@pytest.fixture
def _arkivuttrekk_dto() -> Arkivuttrekk_dto:
    return Arkivuttrekk_dto(
        obj_id=UUID("df53d1d8-39bf-4fea-a741-58d472664ce2"),
        status=ArkivuttrekkStatus.OPPRETTET,
        type=ArkivuttrekkType.NOARK5,
        tittel="tittel",
        sjekksum_sha256="2afeec307b0573339b3292e27e7971b5b040a5d7e8f7432339cae2fcd0eb936a",
        avgiver_navn="<NAME>",
        avgiver_epost="<EMAIL>",
        koordinator_epost="<EMAIL>",
        metadatafil_id=1,
        arkiv_startdato=date.fromisoformat("1864-04-10"),
        arkiv_sluttdato=date.fromisoformat("1900-05-12"),
        storrelse=45620,
        avtalenummer="01/12345",
        depotinstitusjon="ARKIVVERKET",
    )


def test_to_domain(_arkivuttrekk_dto, _arkivuttrekk_domain):
    """
    GIVEN   an object of type ArkivuttrekkBase
    WHEN    calling the internal method to_domain()
    THEN    check that returned domain object Arkivuttrekk is correct
    """

    expected = _arkivuttrekk_domain
    actual = _arkivuttrekk_dto.to_domain()
    assert vars(actual) == vars(expected)

from datetime import date
from uuid import UUID

import pytest

from app.domain.models.Arkivuttrekk import Arkivuttrekk, ArkivuttrekkStatus, ArkivuttrekkType
from app.domain.models.Depotinstitusjoner import DepotinstitusjonerEnum
from app.routers.dto.Arkivuttrekk import ArkivuttrekkCreate as Arkivuttrekk_dto


@pytest.fixture
def _arkivuttrekk_domain() -> Arkivuttrekk:
    return Arkivuttrekk(
        id_=None,
        obj_id=UUID("df53d1d8-39bf-4fea-a741-58d472664ce2"),
        status=ArkivuttrekkStatus.OPPRETTET,
        type_=ArkivuttrekkType.NOARK5,
        tittel="tittel",
        sjekksum_sha256="2afeec307b0573339b3292e27e7971b5b040a5d7e8f7432339cae2fcd0eb936a",
        avgiver_navn="<NAME>",
        avgiver_epost="<EMAIL>",
        koordinator_epost="<EMAIL>",
        metadatafil_id=1,
        arkiv_startdato=date.fromisoformat("1864-04-10"),
        arkiv_sluttdato=date.fromisoformat("1900-05-12"),
        storrelse=45620,
        avtalenummer="01/12345",
        depotinstitusjon=DepotinstitusjonerEnum("ARKIVVERKET"),
        opprettet=None,
        endret=None
    )


@pytest.fixture
def _arkivuttrekk_dto() -> Arkivuttrekk_dto:
    return Arkivuttrekk_dto(
        obj_id=UUID("df53d1d8-39bf-4fea-a741-58d472664ce2"),
        status=ArkivuttrekkStatus.OPPRETTET,
        type=ArkivuttrekkType.NOARK5,
        tittel="tittel",
        sjekksum_sha256="2afeec307b0573339b3292e27e7971b5b040a5d7e8f7432339cae2fcd0eb936a",
        avgiver_navn="<NAME>",
        avgiver_epost="<EMAIL>",
        koordinator_epost="<EMAIL>",
        metadatafil_id=1,
        arkiv_startdato=date.fromisoformat("1864-04-10"),
        arkiv_sluttdato=date.fromisoformat("1900-05-12"),
        storrelse=45620,
        avtalenummer="01/12345",
        depotinstitusjon="ARKIVVERKET",
    )


def test_to_domain(_arkivuttrekk_dto, _arkivuttrekk_domain):
    """
    GIVEN   an object of type ArkivuttrekkBase
    WHEN    calling the internal method to_domain()
    THEN    check that returned domain object Arkivuttrekk is correct
    """

    expected = _arkivuttrekk_domain
    actual = _arkivuttrekk_dto.to_domain()
    assert vars(actual) == vars(expected)

GIVEN   an object of type ArkivuttrekkBase     WHEN    calling the internal method to_domain()     THEN    check that returned domain object Arkivuttrekk is correct