From 1760196578b3fa3d4fa7f598879506528b1c6058 Mon Sep 17 00:00:00 2001
From: bleizi <bleizi@crans.org>
Date: Sun, 27 Aug 2023 23:11:40 +0200
Subject: [PATCH] more tests

---
 apps/wei/forms/surveys/wei2023.py         | 27 ----------
 apps/wei/tests/test_wei_algorithm_2023.py | 60 +++++++++++++++++++++++
 apps/wei/tests/test_wei_registration.py   | 18 +------
 3 files changed, 61 insertions(+), 44 deletions(-)

diff --git a/apps/wei/forms/surveys/wei2023.py b/apps/wei/forms/surveys/wei2023.py
index 29a81749..6748d832 100644
--- a/apps/wei/forms/surveys/wei2023.py
+++ b/apps/wei/forms/surveys/wei2023.py
@@ -1,14 +1,11 @@
 # Copyright (C) 2018-2023 by BDE ENS Paris-Saclay
 # SPDX-License-Identifier: GPL-3.0-or-later
 
-# import time
 from functools import lru_cache
-# from random import Random
 
 from django import forms
 from django.db import transaction
 from django.db.models import Q
-# from django.utils.translation import gettext_lazy as _
 
 from .base import WEISurvey, WEISurveyInformation, WEISurveyAlgorithm, WEIBusInformation
 from ...models import WEIMembership
@@ -48,12 +45,6 @@ class WEISurveyForm2023(forms.Form):
         """
         information = WEISurveyInformation2023(registration)
 
-#        if self.data:
-#            for question in WORDS:
-#                self.fields[question].choices = [answer for answer in WORDS[question][1]]
-#            if self.is_valid():
-#                return
-
         question = information.questions[information.step]
         self.fields[question] = forms.ChoiceField(
             label=WORDS[question][0] + question,
@@ -86,14 +77,6 @@ class WEISurveyInformation2023(WEISurveyInformation):
     questions = list(WORDS.keys())
 
     def __init__(self, registration):
-#        print(hasattr(self,"questions"))
-#        if not hasattr(self, "questions"):
-#            rng = Random(int(1000 * time.time()))
-#            questions = list(WORDS.keys())
-#            rng.shuffle(questions)
-#            setattr(self, "questions", questions)
-#            print(questions)
-
         for question in WORDS:
             setattr(self, str(question), None)
         super().__init__(registration)
@@ -143,15 +126,6 @@ class WEISurvey2023(WEISurvey):
                 return False
         return True
 
-#    @classmethod
-#    @lru_cache()
-#    def word_mean(cls, word):
-#        """
-#        Calculate the mid-score given by all buses.
-#        """
-#        buses = cls.get_algorithm_class().get_buses()
-#        return sum([cls.get_algorithm_class().get_bus_information(bus).scores[word] for bus in buses]) / buses.count()
-
     @lru_cache()
     def score(self, bus):
         if not self.is_complete():
@@ -176,7 +150,6 @@ class WEISurvey2023(WEISurvey):
 
     @classmethod
     def clear_cache(cls):
-#        cls.word_mean.cache_clear()
         return super().clear_cache()
 
 
diff --git a/apps/wei/tests/test_wei_algorithm_2023.py b/apps/wei/tests/test_wei_algorithm_2023.py
index 9635c5b8..714024e2 100644
--- a/apps/wei/tests/test_wei_algorithm_2023.py
+++ b/apps/wei/tests/test_wei_algorithm_2023.py
@@ -2,9 +2,12 @@
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import random
+from datetime import date
 
 from django.contrib.auth.models import User
 from django.test import TestCase
+from django.urls import reverse
+from note.models import NoteUser
 
 from ..forms.surveys.wei2023 import WEIBusInformation2023, WEISurvey2023, WORDS, WEISurveyInformation2023
 from ..models import Bus, WEIClub, WEIRegistration
@@ -20,9 +23,25 @@ class TestWEIAlgorithm(TestCase):
         """
         Create some test data, with one WEI and 10 buses with random score attributions.
         """
+        self.user = User.objects.create_superuser(
+            username="weiadmin",
+            password="admin",
+            email="admin@example.com",
+        )
+        self.user.save()
+        self.client.force_login(self.user)
+        sess = self.client.session
+        sess["permission_mask"] = 42
+        sess.save()
+
         self.wei = WEIClub.objects.create(
             name="WEI 2023",
             email="wei2023@example.com",
+            parent_club_id=2,
+            membership_fee_paid=12500,
+            membership_fee_unpaid=5500,
+            membership_start='2023-08-26',
+            membership_end='2023-09-15',
             date_start='2023-09-16',
             date_end='2023-09-18',
             year=2023,
@@ -108,3 +127,44 @@ class TestWEIAlgorithm(TestCase):
             self.assertLessEqual(max_score - score, 25)  # Always less than 25 % of tolerance
 
         self.assertLessEqual(penalty / 100, 25)  # Tolerance of 5 %
+
+    def test_register_1a(self):
+        """
+        Test register a first year member to the WEI and complete the survey
+        """
+        response = self.client.get(reverse("wei:wei_register_1A", kwargs=dict(wei_pk=self.wei.pk)))
+        self.assertEqual(response.status_code, 200)
+
+        user = User.objects.create(username="toto", email="toto@example.com")
+        NoteUser.objects.create(user=user)
+        response = self.client.post(reverse("wei:wei_register_1A", kwargs=dict(wei_pk=self.wei.pk)), dict(
+            user=user.id,
+            soge_credit=True,
+            birth_date=date(2000, 1, 1),
+            gender='nonbinary',
+            clothing_cut='female',
+            clothing_size='XS',
+            health_issues='I am a bot',
+            emergency_contact_name='NoteKfet2020',
+            emergency_contact_phone='+33123456789',
+        ))
+        qs = WEIRegistration.objects.filter(user_id=user.id)
+        self.assertTrue(qs.exists())
+        registration = qs.get()
+        self.assertRedirects(response, reverse("wei:wei_survey", kwargs=dict(pk=registration.pk)), 302, 200)
+        for question in WORDS:
+            # Fill 1A Survey, 20 pages
+            # be careful if questionnary form change (number of page, type of answer...)
+            response = self.client.post(reverse("wei:wei_survey", kwargs=dict(pk=registration.pk)), {
+                question: "1"
+            })
+            registration.refresh_from_db()
+            survey = WEISurvey2023(registration)
+            self.assertRedirects(response, reverse("wei:wei_survey", kwargs=dict(pk=registration.pk)), 302,
+                                 302 if survey.is_complete() else 200)
+            self.assertIsNotNone(getattr(survey.information, question), "Survey page " + question + " failed")
+        survey = WEISurvey2023(registration)
+        self.assertTrue(survey.is_complete())
+        survey.select_bus(self.buses[0])
+        survey.save()
+        self.assertIsNotNone(survey.information.get_selected_bus())
diff --git a/apps/wei/tests/test_wei_registration.py b/apps/wei/tests/test_wei_registration.py
index 1c7e2a31..3db423b9 100644
--- a/apps/wei/tests/test_wei_registration.py
+++ b/apps/wei/tests/test_wei_registration.py
@@ -380,7 +380,7 @@ class TestWEIRegistration(TestCase):
 
     def test_register_1a(self):
         """
-        Test register a first year member to the WEI and complete the survey.
+        Test register a first year member to the WEI.
         """
         response = self.client.get(reverse("wei:wei_register_1A", kwargs=dict(wei_pk=self.wei.pk)))
         self.assertEqual(response.status_code, 200)
@@ -402,22 +402,6 @@ class TestWEIRegistration(TestCase):
         self.assertTrue(qs.exists())
         registration = qs.get()
         self.assertRedirects(response, reverse("wei:wei_survey", kwargs=dict(pk=registration.pk)), 302, 200)
-#        for i in range(1, 21):
-#            # Fill 1A Survey, 20 pages
-#            # be careful if questionnary form change (number of page, type of answer...)
-#            response = self.client.post(reverse("wei:wei_survey", kwargs=dict(pk=registration.pk)), dict(
-#                word=1,
-#            ))
-#            registration.refresh_from_db()
-#            survey = CurrentSurvey(registration)
-#            self.assertRedirects(response, reverse("wei:wei_survey", kwargs=dict(pk=registration.pk)), 302,
-#                                 302 if survey.is_complete() else 200)
-#            self.assertIsNotNone(getattr(survey.information, "word" + str(i)), "Survey page #" + str(i) + " failed")
-#        survey = CurrentSurvey(registration)
-#        self.assertTrue(survey.is_complete())
-#        survey.select_bus(self.bus)
-#        survey.save()
-#        self.assertIsNotNone(survey.information.get_selected_bus())
 
         # Check that the user can't be registered twice
         response = self.client.post(reverse("wei:wei_register_1A", kwargs=dict(wei_pk=self.wei.pk)), dict(
-- 
GitLab