from datetime import datetime
from uuid import UUID

import pytest

from app.domain.models.Invitasjon import Invitasjon, InvitasjonStatus
from app.domain.models.Overforingspakke import Overforingspakke, OverforingspakkeStatus


@pytest.fixture
def testobj_invitasjon():
    return Invitasjon(id_=1,
                      ekstern_id=UUID('b4c67f0d-4451-4473-b95a-4956e405c600'),
                      arkivuttrekk_id=1,
                      avgiver_epost="<EMAIL>",
                      status=InvitasjonStatus.SENDT,
                      opprettet=datetime.fromisoformat("2021-03-10T15:00:00+01:00"))


@pytest.fixture
def testobj_overforingspakke():
    return Overforingspakke(id_=1,
                            invitasjon_id=1,
                            tusd_id="1a67a8d3-e48c-4822-9e86-f9a32e35de0e",
                            tusd_objekt_navn="1a67a8d3-e48c-4822-9e86-f9a32e35de0e",
                            storrelse=5000,
                            status=OverforingspakkeStatus.OK,
                            opprettet=datetime.fromisoformat("2021-02-23T15:00:00+01:00"),
                            endret=datetime.fromisoformat("2021-02-23T15:00:00+01:00"))


@pytest.fixture
def testobj_invitasjon_with_overforingspakke(testobj_invitasjon, testobj_overforingspakke):
    invitasjon = testobj_invitasjon
    invitasjon.overforingspakke = testobj_overforingspakke
    return invitasjon


def test_eq(testobj_invitasjon):
    result = Invitasjon(id_=1,
                        ekstern_id=UUID('b4c67f0d-4451-4473-b95a-4956e405c600'),
                        arkivuttrekk_id=1,
                        avgiver_epost="<EMAIL>",
                        status=InvitasjonStatus.SENDT,
                        opprettet=datetime.fromisoformat("2021-03-10T15:00:00+01:00"))

    assert result == testobj_invitasjon


def test_eq_with_matching_overforingspakke(testobj_overforingspakke, testobj_invitasjon_with_overforingspakke):
    result = Invitasjon(id_=1,
                        ekstern_id=UUID('b4c67f0d-4451-4473-b95a-4956e405c600'),
                        arkivuttrekk_id=1,
                        avgiver_epost="<EMAIL>",
                        status=InvitasjonStatus.SENDT,
                        opprettet=datetime.fromisoformat("2021-03-10T15:00:00+01:00"),
                        overforingspakke=testobj_overforingspakke)

    assert result == testobj_invitasjon_with_overforingspakke


def test_eq_without_matching_overforingspakke(testobj_invitasjon_with_overforingspakke, testobj_invitasjon):
    # Equality check of Invitasjon should not fail if mismatch of overforingspakke
    assert testobj_invitasjon_with_overforingspakke == testobj_invitasjon
