import datetime

from django.urls import reverse

from functions import create_appointment_type, create_appointment
from web.models import Item, Appointment
from web.views.notifications import get_today_midnight_date
from . import LoggedInTestCase


class ViewFunctionsTests(LoggedInTestCase):
    def test_kit_requests(self):
        response = self.client.get(reverse('web.views.kit_requests'))
        self.assertEqual(response.status_code, 200)

    def test_kit_requests_2(self):
        item_name = "Test item to be ordered"
        item = Item.objects.create(disposable=True, name=item_name)
        appointment_type = create_appointment_type()
        appointment_type.required_equipment.add(item)
        appointment_type.save()

        appointment = create_appointment()
        appointment.datetime_when = get_today_midnight_date() + datetime.timedelta(days=2)
        appointment.appointment_types.add(appointment_type)
        appointment.save()

        response = self.client.get(reverse('web.views.kit_requests'))
        self.assertEqual(response.status_code, 200)

        self.assertTrue(item_name in response.content)

    def test_kit_requests_4(self):
        item_name = "Test item to be ordered"
        item = Item.objects.create(disposable=True, name=item_name)
        appointment_type = create_appointment_type()
        appointment_type.required_equipment.add(item)
        appointment_type.save()

        appointment = create_appointment()
        appointment.datetime_when = get_today_midnight_date() + datetime.timedelta(days=2)
        appointment.appointment_types.add(appointment_type)
        appointment.status = Appointment.APPOINTMENT_STATUS_CANCELLED
        appointment.save()

        response = self.client.get(reverse('web.views.kit_requests'))
        self.assertEqual(response.status_code, 200)

        self.assertFalse(item_name in response.content)

    def test_kit_requests_3(self):
        item_name = "Test item to be ordered"
        item = Item.objects.create(disposable=True, name=item_name)
        appointment_type = create_appointment_type()
        appointment_type.required_equipment.add(item)
        appointment_type.save()

        appointment = create_appointment()
        appointment.datetime_when = get_today_midnight_date() + datetime.timedelta(days=2)
        appointment.appointment_types.add(appointment_type)
        appointment.save()

        response = self.client.get(reverse('web.views.kit_requests'))
        self.assertEqual(response.status_code, 200)

        self.assertTrue(item_name in response.content)