diff --git a/bda/tests/test_views.py b/bda/tests/test_views.py index bd851dc7..3dc1b4d1 100644 --- a/bda/tests/test_views.py +++ b/bda/tests/test_views.py @@ -2,8 +2,9 @@ import json from datetime import timedelta from django.test import TestCase -from django.utils import timezone +from django.utils import formats, timezone +from ..models import Participant from .testcases import BdATestHelpers, BdAViewTestCaseMixin @@ -25,6 +26,109 @@ class InscriptionViewTestCase(BdATestHelpers, BdAViewTestCaseMixin, TestCase): def url_expected(self): return "/bda/inscription/{}".format(self.tirage.id) + def test_get_opened(self): + self.tirage.ouverture = timezone.now() - timedelta(days=1) + self.tirage.fermeture = timezone.now() + timedelta(days=1) + self.tirage.save() + + resp = self.client.get(self.url) + + self.assertEqual(resp.status_code, 200) + self.assertFalse(resp.context["messages"]) + + def test_get_closed_future(self): + self.tirage.ouverture = timezone.now() + timedelta(days=1) + self.tirage.fermeture = timezone.now() + timedelta(days=2) + self.tirage.save() + + resp = self.client.get(self.url) + + self.assertEqual(resp.status_code, 200) + self.assertIn( + "Le tirage n'est pas encore ouvert : ouverture le {}".format( + formats.localize(timezone.template_localtime(self.tirage.ouverture)) + ), + [str(msg) for msg in resp.context["messages"]], + ) + + def test_get_closed_past(self): + self.tirage.ouverture = timezone.now() - timedelta(days=2) + self.tirage.fermeture = timezone.now() - timedelta(days=1) + self.tirage.save() + + resp = self.client.get(self.url) + + self.assertEqual(resp.status_code, 200) + self.assertIn( + " C'est fini : tirage au sort dans la journée !", + [str(msg) for msg in resp.context["messages"]], + ) + + def get_base_post_data(self): + return { + "choixspectacle_set-TOTAL_FORMS": "3", + "choixspectacle_set-INITIAL_FORMS": "0", + "choixspectacle_set-MIN_NUM_FORMS": "0", + "choixspectacle_set-MAX_NUM_FORMS": "1000", + } + + base_post_data = property(get_base_post_data) + + def test_post(self): + self.tirage.ouverture = timezone.now() - timedelta(days=1) + self.tirage.fermeture = timezone.now() + timedelta(days=1) + self.tirage.save() + + data = dict( + self.base_post_data, + **{ + "choixspectacle_set-TOTAL_FORMS": "2", + "choixspectacle_set-0-id": "", + "choixspectacle_set-0-participant": "", + "choixspectacle_set-0-spectacle": str(self.show1.pk), + "choixspectacle_set-0-double_choice": "1", + "choixspectacle_set-0-priority": "2", + "choixspectacle_set-1-id": "", + "choixspectacle_set-1-participant": "", + "choixspectacle_set-1-spectacle": str(self.show2.pk), + "choixspectacle_set-1-double_choice": "autoquit", + "choixspectacle_set-1-priority": "1", + } + ) + resp = self.client.post(self.url, data) + + self.assertEqual(resp.status_code, 200) + self.assertIn( + "Votre inscription a été mise à jour avec succès !", + [str(msg) for msg in resp.context["messages"]], + ) + participant = Participant.objects.get( + user=self.users["bda_member"], tirage=self.tirage + ) + self.assertSetEqual( + set( + participant.choixspectacle_set.values_list( + "priority", "spectacle_id", "double_choice" + ) + ), + {(1, self.show2.pk, "autoquit"), (2, self.show1.pk, "1")}, + ) + + def test_post_state_changed(self): + self.tirage.ouverture = timezone.now() - timedelta(days=1) + self.tirage.fermeture = timezone.now() + timedelta(days=1) + self.tirage.save() + + data = {"dbstate": "different"} + resp = self.client.post(self.url, data) + + self.assertEqual(resp.status_code, 200) + self.assertIn( + "Impossible d'enregistrer vos modifications : vous avez apporté d'autres " + "modifications entre temps.", + [str(msg) for msg in resp.context["messages"]], + ) + class PlacesViewTestCase(BdATestHelpers, BdAViewTestCaseMixin, TestCase): url_name = "bda-places-attribuees"