import logging

from django.urls import reverse

from web.forms.forms import VoucherForm
from web.models import Voucher
from web.models.constants import VOUCHER_STATUS_NEW
from web.tests.functions import create_voucher, create_study_subject, format_form_field, create_voucher_type
from .. import LoggedInTestCase

logger = logging.getLogger(__name__)


class VoucherTypeViewTests(LoggedInTestCase):
    def test_render_add_voucher_request(self):
        response = self.client.get(reverse('web.views.voucher_add'))
        self.assertEqual(response.status_code, 200)

    def test_render_edit_voucher_request(self):
        voucher = create_voucher()
        response = self.client.get(reverse('web.views.voucher_edit', kwargs={'pk': voucher.id}))
        self.assertEqual(response.status_code, 200)

    def test_add_voucher(self):
        study_subject = create_study_subject()
        visit_detail_form = VoucherForm()
        form_data = {
            "status": VOUCHER_STATUS_NEW,
            "voucher_type": create_voucher_type().id
        }
        for key, value in visit_detail_form.initial.items():
            form_data[key] = format_form_field(value)

        url = reverse('web.views.voucher_add') + '?study_subject_id=' + str(study_subject.id)
        response = self.client.post(url, data=form_data)
        self.assertEqual(response.status_code, 302)

        self.assertEqual(1, Voucher.objects.all().count())

    def test_edit_voucher(self):
        voucher = create_voucher()
        voucher_form = VoucherForm(instance=voucher)
        form_data = {}
        for key, value in voucher_form.initial.items():
            form_data[key] = format_form_field(value)

        form_data["usage_partner"] = ""
        form_data["use_date"] = ""

        url = reverse('web.views.voucher_edit', kwargs={'pk': voucher.id})
        response = self.client.post(url, data=form_data)
        self.assertEqual(response.status_code, 302)

        self.assertEqual(1, Voucher.objects.all().count())