Skip to content
Snippets Groups Projects
test_voucher_forms.py 2.29 KiB
Newer Older
import logging

from django.urls import reverse

from web.forms import VoucherForm
from web.models import WorkerStudyRole, Voucher
from web.models.constants import VOUCHER_STATUS_USED
from web.models.worker_study_role import ROLE_CHOICES_VOUCHER_PARTNER
from web.tests import LoggedInWithWorkerTestCase
from web.tests.functions import create_study_subject, create_voucher_type, format_form_field, create_voucher, \
    create_worker

logger = logging.getLogger(__name__)


class VoucherFormTests(LoggedInWithWorkerTestCase):
    def setUp(self):
        super(VoucherFormTests, self).setUp()
        self.voucher_partner = create_worker()
        WorkerStudyRole.objects.filter(worker=self.voucher_partner).update(role=ROLE_CHOICES_VOUCHER_PARTNER)
    def test_create_voucher(self):
        voucher_type = create_voucher_type()
        study_subject = create_study_subject()
        study_subject.voucher_types.add(voucher_type)
        create_voucher(study_subject)

        voucher_form = VoucherForm()
        form_data = {
            "status": VOUCHER_STATUS_USED,
            "usage_partner": str(self.voucher_partner.id),
            "voucher_type": voucher_type.id
        }
        for key, value in voucher_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(2, Voucher.objects.all().count())

    def test_invalid_usage_partner(self):
        study_subject = create_study_subject()
        voucher = create_voucher(study_subject)
        voucher.status = VOUCHER_STATUS_USED
        voucher.save()

        form_data = self.get_voucher_form_data(voucher)
        form_data["usage_partner"] = ""

        voucher_form = VoucherForm(instance=voucher, data=form_data)

        self.assertFalse(voucher_form.is_valid())
        self.assertTrue("usage_partner" in voucher_form.errors)

    @staticmethod
    def get_voucher_form_data(voucher):
        voucher_form = VoucherForm(instance=voucher)
        form_data = {}
        for key, value in voucher_form.initial.items():
            form_data[key] = format_form_field(value)
        return form_data