diff --git a/apps/wei/forms/surveys/base.py b/apps/wei/forms/surveys/base.py
index 173d1758912b063cff4b0417be433146cbcf8b16..e8b0cbbaf639fb60248426cc206f42cd67ac10f8 100644
--- a/apps/wei/forms/surveys/base.py
+++ b/apps/wei/forms/surveys/base.py
@@ -25,9 +25,7 @@ class WEISurveyInformation:
         If the algorithm ran, return the prefered bus according to the survey.
         In the other case, return None.
         """
-        if not self.valid:
-            return None
-        return Bus.objects.get(pk=self.selected_bus_pk)
+        return Bus.objects.get(pk=self.selected_bus_pk) if self.valid else None
 
     def save(self, registration) -> None:
         """
diff --git a/apps/wei/tables.py b/apps/wei/tables.py
index a963ba0e36fa169556a2bc62e1cfd3826b5cd823..6ddfcf39d3734f2ec8eaab2ca2718d8c40663d3a 100644
--- a/apps/wei/tables.py
+++ b/apps/wei/tables.py
@@ -85,21 +85,21 @@ class WEIRegistrationTable(tables.Table):
     )
 
     def render_validate(self, record):
-        if PermissionBackend.check_perm(get_current_authenticated_user(), "wei.add_weimembership", WEIMembership(
+        hasperm = PermissionBackend.check_perm(
+            get_current_authenticated_user(), "wei.add_weimembership", WEIMembership(
                 club=record.wei,
                 user=record.user,
                 date_start=timezone.now().date(),
                 date_end=timezone.now().date(),
                 fee=0,
                 registration=record,
-        )):
-            return _("Validate")
-        return format_html("<span class='no-perm'></span>")
+            )
+        )
+        return _("Validate") if hasperm else format_html("<span class='no-perm'></span>")
 
     def render_delete(self, record):
-        if PermissionBackend.check_perm(get_current_authenticated_user(), "wei.delete_weimembership", record):
-            return _("Delete")
-        return format_html("<span class='no-perm'></span>")
+        hasperm = PermissionBackend.check_perm(get_current_authenticated_user(), "wei.delete_weimembership", record)
+        return _("Delete") if hasperm else format_html("<span class='no-perm'></span>")
 
     class Meta:
         attrs = {
diff --git a/apps/wei/tests/test_wei_registration.py b/apps/wei/tests/test_wei_registration.py
index c055baebd56c53fdb1272d9b840a38c755d8dff5..f09ae6045640cd4b9928640ea64b496f623c29a3 100644
--- a/apps/wei/tests/test_wei_registration.py
+++ b/apps/wei/tests/test_wei_registration.py
@@ -2,7 +2,7 @@
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import subprocess
-from datetime import timedelta
+from datetime import timedelta, date
 
 from django.conf import settings
 from django.contrib.auth.models import User
@@ -11,9 +11,10 @@ from django.test import TestCase
 from django.urls import reverse
 from django.utils import timezone
 from member.models import Membership
-from note.models import NoteClub
+from note.models import NoteClub, SpecialTransaction
+from treasury.models import SogeCredit
 
-from ..forms import CurrentSurvey
+from ..forms import CurrentSurvey, WEISurveyAlgorithm, WEISurvey
 from ..models import WEIClub, Bus, BusTeam, WEIRole, WEIRegistration, WEIMembership
 
 
@@ -38,6 +39,7 @@ class TestWEIList(TestCase):
         response = self.client.get(reverse("wei:current_wei_detail"))
         self.assertRedirects(response, reverse("wei:wei_list"), 302, 200)
 
+
 class TestWEIRegistration(TestCase):
     """
     Test the whole WEI app
@@ -54,6 +56,7 @@ class TestWEIRegistration(TestCase):
             password="admin",
             email="admin@example.com",
         )
+        self.user.save()
         self.client.force_login(self.user)
         sess = self.client.session
         sess["permission_mask"] = 42
@@ -66,11 +69,11 @@ class TestWEIRegistration(TestCase):
             parent_club_id=2,
             membership_fee_paid=12500,
             membership_fee_unpaid=5500,
-            membership_start=str(self.year) + "-01-01",
-            membership_end=str(self.year) + "-12-31",
+            membership_start=date(self.year, 1, 1),
+            membership_end=date(self.year, 12, 31),
             year=self.year,
             date_start=timezone.now().date() + timedelta(days=2),
-            date_end=str(self.year) + "-12-31",
+            date_end=date(self.year, 12, 31),
         )
         NoteClub.objects.create(club=self.wei)
         self.bus = Bus.objects.create(
@@ -89,7 +92,7 @@ class TestWEIRegistration(TestCase):
             wei_id=self.wei.id,
             soge_credit=True,
             caution_check=True,
-            birth_date="2000-01-01",
+            birth_date=date(2000, 1, 1),
             gender="nonbinary",
             clothing_cut="male",
             clothing_size="XL",
@@ -99,7 +102,7 @@ class TestWEIRegistration(TestCase):
             ml_events_registration=True,
             ml_sport_registration=True,
             ml_art_registration=True,
-            first_year=True,
+            first_year=False,
         )
 
     def test_create_wei(self):
@@ -156,7 +159,7 @@ class TestWEIRegistration(TestCase):
         self.assertTrue(qs.exists())
 
         # Check that if the WEI is started, we can't update a wei
-        self.wei.date_start = '2000-01-01'
+        self.wei.date_start = date(2000, 1, 1)
         self.wei.save()
         response = self.client.get(reverse("wei:wei_update", kwargs=dict(pk=self.wei.pk)))
         self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
@@ -190,10 +193,11 @@ class TestWEIRegistration(TestCase):
         qs = Bus.objects.filter(name="Create Bus Test")
         self.assertTrue(qs.exists())
         bus = qs.get()
+        CurrentSurvey.get_algorithm_class().get_bus_information(bus).save()
         self.assertRedirects(response, reverse("wei:manage_bus", kwargs=dict(pk=bus.pk)), 302, 200)
 
         # Check that if the WEI is started, we can't create a bus
-        self.wei.date_start = '2000-01-01'
+        self.wei.date_start = date(2000, 1, 1)
         self.wei.save()
         response = self.client.get(reverse("wei:add_bus", kwargs=dict(pk=self.wei.pk)))
         self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
@@ -221,7 +225,7 @@ class TestWEIRegistration(TestCase):
         self.assertTrue(qs.exists())
 
         # Check that if the WEI is started, we can't update a bus
-        self.wei.date_start = '2000-01-01'
+        self.wei.date_start = date(2000, 1, 1)
         self.wei.save()
         response = self.client.get(reverse("wei:update_bus", kwargs=dict(pk=self.bus.pk)))
         self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
@@ -245,7 +249,7 @@ class TestWEIRegistration(TestCase):
         self.assertRedirects(response, reverse("wei:manage_bus_team", kwargs=dict(pk=team.pk)), 302, 200)
 
         # Check that if the WEI is started, we can't create a team
-        self.wei.date_start = '2000-01-01'
+        self.wei.date_start = date(2000, 1, 1)
         self.wei.save()
         response = self.client.get(reverse("wei:add_team", kwargs=dict(pk=self.bus.pk)))
         self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
@@ -274,7 +278,7 @@ class TestWEIRegistration(TestCase):
         self.assertTrue(qs.exists())
 
         # Check that if the WEI is started, we can't update a team
-        self.wei.date_start = '2000-01-01'
+        self.wei.date_start = date(2000, 1, 1)
         self.wei.save()
         response = self.client.get(reverse("wei:update_bus_team", kwargs=dict(pk=self.team.pk)))
         self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
@@ -286,16 +290,13 @@ class TestWEIRegistration(TestCase):
         response = self.client.get(reverse("wei:wei_register_2A", kwargs=dict(wei_pk=self.wei.pk)))
         self.assertEqual(response.status_code, 200)
 
-        response = self.client.get(reverse("wei:wei_register_2A_myself", kwargs=dict(wei_pk=self.wei.pk)))
-        self.assertEqual(response.status_code, 200)
-
         user = User.objects.create(username="toto", email="toto@example.com")
 
         # Try with an invalid form
         response = self.client.post(reverse("wei:wei_register_2A", kwargs=dict(wei_pk=self.wei.pk)), dict(
             user=user.id,
             soge_credit=True,
-            birth_date='2000-01-01',
+            birth_date=date(2000, 1, 1),
             gender='nonbinary',
             clothing_cut='female',
             clothing_size='XS',
@@ -312,7 +313,7 @@ class TestWEIRegistration(TestCase):
         response = self.client.post(reverse("wei:wei_register_2A", kwargs=dict(wei_pk=self.wei.pk)), dict(
             user=user.id,
             soge_credit=True,
-            birth_date='2000-01-01',
+            birth_date=date(2000, 1, 1),
             gender='nonbinary',
             clothing_cut='female',
             clothing_size='XS',
@@ -331,7 +332,7 @@ class TestWEIRegistration(TestCase):
         response = self.client.post(reverse("wei:wei_register_2A", kwargs=dict(wei_pk=self.wei.pk)), dict(
             user=user.id,
             soge_credit=True,
-            birth_date='2000-01-01',
+            birth_date=date(2000, 1, 1),
             gender='nonbinary',
             clothing_cut='female',
             clothing_size='XS',
@@ -345,8 +346,22 @@ class TestWEIRegistration(TestCase):
         self.assertEqual(response.status_code, 200)
         self.assertTrue("This user is already registered to this WEI." in str(response.context["form"].errors))
 
+        # Test the render of the page to register ourself if we have already opened a Société générale account
+        SogeCredit.objects.create(user=self.user, credit_transaction=SpecialTransaction.objects.create(
+            source_id=4,    # Bank transfer
+            destination=self.user.note,
+            quantity=1,
+            amount=0,
+            reason="Test",
+            first_name="toto",
+            last_name="toto",
+            bank="Société générale",
+        ))
+        response = self.client.get(reverse("wei:wei_register_2A_myself", kwargs=dict(wei_pk=self.wei.pk)))
+        self.assertEqual(response.status_code, 200)
+
         # Check that if the WEI is started, we can't register anyone
-        self.wei.date_start = '2000-01-01'
+        self.wei.date_start = date(2000, 1, 1)
         self.wei.save()
         response = self.client.get(reverse("wei:wei_register_2A", kwargs=dict(wei_pk=self.wei.pk)))
         self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
@@ -365,7 +380,7 @@ class TestWEIRegistration(TestCase):
         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='2000-01-01',
+            birth_date=date(2000, 1, 1),
             gender='nonbinary',
             clothing_cut='female',
             clothing_size='XS',
@@ -392,12 +407,15 @@ class TestWEIRegistration(TestCase):
             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(
             user=user.id,
             soge_credit=True,
-            birth_date='2000-01-01',
+            birth_date=date(2000, 1, 1),
             gender='nonbinary',
             clothing_cut='female',
             clothing_size='XS',
@@ -423,7 +441,7 @@ class TestWEIRegistration(TestCase):
         response = self.client.post(reverse("wei:wei_register_1A", kwargs=dict(wei_pk=second_wei.pk)), dict(
             user=user.id,
             soge_credit=True,
-            birth_date='2000-01-01',
+            birth_date=date(2000, 1, 1),
             gender='nonbinary',
             clothing_cut='female',
             clothing_size='XS',
@@ -439,11 +457,14 @@ class TestWEIRegistration(TestCase):
                         in str(response.context["form"].errors))
 
         # Check that if the WEI is started, we can't register anyone
-        self.wei.date_start = '2000-01-01'
+        self.wei.date_start = date(2000, 1, 1)
         self.wei.save()
         response = self.client.get(reverse("wei:wei_register_1A", kwargs=dict(wei_pk=self.wei.pk)))
         self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
 
+        response = self.client.get(reverse("wei:wei_survey", kwargs=dict(pk=registration.pk)))
+        self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
+
     def test_wei_survey_ended(self):
         """
         Test display the end page of a survey.
@@ -455,9 +476,6 @@ class TestWEIRegistration(TestCase):
         """
         Test update a registration.
         """
-        response = self.client.get(reverse("wei:wei_update_registration", kwargs=dict(pk=self.registration.pk)))
-        self.assertEqual(response.status_code, 200)
-
         self.registration.information = dict(
             preferred_bus_pk=[],
             preferred_team_pk=[],
@@ -465,6 +483,9 @@ class TestWEIRegistration(TestCase):
         )
         self.registration.save()
 
+        response = self.client.get(reverse("wei:wei_update_registration", kwargs=dict(pk=self.registration.pk)))
+        self.assertEqual(response.status_code, 200)
+
         response = self.client.post(
             reverse("wei:wei_update_registration", kwargs=dict(pk=self.registration.pk)),
             dict(
@@ -487,16 +508,95 @@ class TestWEIRegistration(TestCase):
         self.assertTrue(qs.exists())
         self.assertRedirects(response, reverse("wei:validate_registration", kwargs=dict(pk=qs.get().pk)), 302, 200)
 
+        # Check the page when the registration is already validated
+        membership = WEIMembership(
+            user=self.user,
+            club=self.wei,
+            registration=self.registration,
+            bus=self.bus,
+            team=self.team,
+        )
+        membership._soge = True
+        membership._force_renew_parent = True
+        membership.save()
+        soge_credit = SogeCredit.objects.get(user=self.user)
+        soge_credit.credit_transaction = SpecialTransaction.objects.create(
+            source_id=4,  # Bank transfer
+            destination=self.user.note,
+            quantity=1,
+            amount=0,
+            reason="Test",
+            first_name="toto",
+            last_name="toto",
+            bank="Société générale",
+        )
+        soge_credit.save()
+
+        sess = self.client.session
+        sess["permission_mask"] = 0
+        sess.save()
+        response = self.client.get(reverse("wei:wei_update_registration", kwargs=dict(pk=self.registration.pk)))
+        self.assertEqual(response.status_code, 200)
+        sess["permission_mask"] = 42
+        sess.save()
+
+        response = self.client.post(
+            reverse("wei:wei_update_registration", kwargs=dict(pk=self.registration.pk)),
+            dict(
+                user=self.user.id,
+                soge_credit=False,
+                birth_date='2015-01-01',
+                gender='male',
+                clothing_cut='female',
+                clothing_size='L',
+                health_issues='I am really a bot',
+                emergency_contact_name='Note Kfet 2020',
+                emergency_contact_phone='+33600000000',
+                bus=[self.bus.id],
+                team=[self.team.id],
+                roles=[role.id for role in WEIRole.objects.filter(name="Adhérent WEI").all()],
+                information_json=self.registration.information_json,
+            )
+        )
+        qs = WEIRegistration.objects.filter(user_id=self.user.id, clothing_size="L")
+        self.assertTrue(qs.exists())
+        self.assertRedirects(response, reverse("wei:validate_registration", kwargs=dict(pk=qs.get().pk)), 302, 200)
+
+        # Test invalid form
+        response = self.client.post(
+            reverse("wei:wei_update_registration", kwargs=dict(pk=self.registration.pk)),
+            dict(
+                user=self.user.id,
+                soge_credit=False,
+                birth_date='2015-01-01',
+                gender='male',
+                clothing_cut='female',
+                clothing_size='L',
+                health_issues='I am really a bot',
+                emergency_contact_name='Note Kfet 2020',
+                emergency_contact_phone='+33600000000',
+                bus=[],
+                team=[],
+                roles=[],
+                information_json=self.registration.information_json,
+            )
+        )
+        self.assertFalse(response.context["membership_form"].is_valid())
+
         # Check that if the WEI is started, we can't update a registration
-        self.wei.date_start = '2000-01-01'
+        self.wei.date_start = date(2000, 1, 1)
+        self.wei.update_membership_dates()
         self.wei.save()
-        response = self.client.get(reverse("wei:validate_registration", kwargs=dict(pk=self.registration.pk)))
+        response = self.client.get(reverse("wei:wei_update_registration", kwargs=dict(pk=self.registration.pk)))
         self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
 
     def test_delete_registration(self):
         """
         Test delete a WEI registration.
         """
+        response = self.client.get(reverse("wei:wei_delete_registration", kwargs=dict(pk=self.registration.pk)))
+        self.assertEqual(response.status_code, 200)
+
         response = self.client.delete(reverse("wei:wei_delete_registration", kwargs=dict(pk=self.registration.pk)))
         self.assertRedirects(response, reverse("wei:wei_detail", kwargs=dict(pk=self.wei.pk)), 302, 200)
 
@@ -507,6 +607,32 @@ class TestWEIRegistration(TestCase):
         response = self.client.get(reverse("wei:validate_registration", kwargs=dict(pk=self.registration.pk)))
         self.assertEqual(response.status_code, 200)
 
+        self.registration.first_year = True
+        self.registration.save()
+
+        response = self.client.get(reverse("wei:validate_registration", kwargs=dict(pk=self.registration.pk)))
+        self.assertEqual(response.status_code, 200)
+
+        self.registration.first_year = False
+        self.registration.save()
+
+        # Check that a team must belong to the bus
+        second_bus = Bus.objects.create(wei=self.wei, name="Second bus")
+        second_team = BusTeam.objects.create(bus=second_bus, name="Second team", color=42)
+        response = self.client.post(reverse("wei:validate_registration", kwargs=dict(pk=self.registration.pk)), dict(
+            roles=[WEIRole.objects.get(name="GC WEI").id],
+            bus=self.bus.pk,
+            team=second_team.pk,
+            credit_type=4,  # Bank transfer
+            credit_amount=420,
+            last_name="admin",
+            first_name="admin",
+            bank="Société générale",
+        ))
+        self.assertEqual(response.status_code, 200)
+        self.assertFalse(response.context["form"].is_valid())
+        self.assertTrue("This team doesn&#39;t belong to the given bus." in str(response.context["form"].errors))
+
         response = self.client.post(reverse("wei:validate_registration", kwargs=dict(pk=self.registration.pk)), dict(
             roles=[WEIRole.objects.get(name="GC WEI").id],
             bus=self.bus.pk,
@@ -543,6 +669,12 @@ class TestWEIRegistration(TestCase):
             self.assertFalse(kfet_membership.transaction.valid)
             self.assertFalse(bde_membership.transaction.valid)
 
+        # Check that if the WEI is started, we can't update a wei
+        self.wei.date_start = date(2000, 1, 1)
+        self.wei.save()
+        response = self.client.get(reverse("wei:validate_registration", kwargs=dict(pk=self.registration.pk)))
+        self.assertRedirects(response, reverse("wei:wei_closed", kwargs=dict(pk=self.wei.pk)), 302, 200)
+
     def test_registrations_list(self):
         """
         Test display the registration list, with or without a research
@@ -579,34 +711,114 @@ class TestWEIRegistration(TestCase):
         """
         Test display the membership list as a PDF file
         """
-        if not self.is_latex_installed():
-            return
-
-        response = self.client.get(reverse("wei:wei_memberships_pdf", kwargs=dict(wei_pk=self.wei.pk)))
-        self.assertEqual(response.status_code, 200)
-        self.assertEqual(response["content-type"], "application/pdf")
+        if self.is_latex_installed():
+            response = self.client.get(reverse("wei:wei_memberships_pdf", kwargs=dict(wei_pk=self.wei.pk)))
+            self.assertEqual(response.status_code, 200)
+            self.assertEqual(response["content-type"], "application/pdf")
 
     def test_bus_memberships_pdf_list(self):
         """
         Test display the membership list of a bus as a PDF file
         """
-        if not self.is_latex_installed():
-            return
-
-        response = self.client.get(reverse("wei:wei_memberships_bus_pdf", kwargs=dict(wei_pk=self.wei.pk,
-                                                                                      bus_pk=self.bus.pk)))
-        self.assertEqual(response.status_code, 200)
-        self.assertEqual(response["content-type"], "application/pdf")
+        if self.is_latex_installed():
+            response = self.client.get(reverse("wei:wei_memberships_bus_pdf", kwargs=dict(wei_pk=self.wei.pk,
+                                                                                          bus_pk=self.bus.pk)))
+            self.assertEqual(response.status_code, 200)
+            self.assertEqual(response["content-type"], "application/pdf")
 
     def test_team_memberships_pdf_list(self):
         """
         Test display the membership list of a bus team as a PDF file
         """
-        if not self.is_latex_installed():
-            return
+        if self.is_latex_installed():
+            response = self.client.get(reverse("wei:wei_memberships_team_pdf", kwargs=dict(wei_pk=self.wei.pk,
+                                                                                           bus_pk=self.bus.pk,
+                                                                                           team_pk=self.team.pk)))
+            self.assertEqual(response.status_code, 200)
+            self.assertEqual(response["content-type"], "application/pdf")
 
-        response = self.client.get(reverse("wei:wei_memberships_team_pdf", kwargs=dict(wei_pk=self.wei.pk,
-                                                                                       bus_pk=self.bus.pk,
-                                                                                       team_pk=self.team.pk)))
-        self.assertEqual(response.status_code, 200)
-        self.assertEqual(response["content-type"], "application/pdf")
+
+class TestDefaultWEISurvey(TestCase):
+    """
+    Doesn't test anything, just cover the default Survey classes.
+    """
+    def check_not_implemented(self, fun: callable, *args, **kwargs):
+        self.assertRaises(NotImplementedError, fun, *args, **kwargs)
+
+    def test_survey_classes(self):
+        WEISurveyAlgorithm.get_bus_information_class()
+        self.check_not_implemented(WEISurveyAlgorithm.get_survey_class)
+        self.check_not_implemented(WEISurveyAlgorithm.get_registrations)
+        self.check_not_implemented(WEISurveyAlgorithm.get_buses)
+        self.check_not_implemented(WEISurveyAlgorithm().run_algorithm)
+
+        self.check_not_implemented(WEISurvey, registration=None)
+        self.check_not_implemented(WEISurvey.get_wei)
+        self.check_not_implemented(WEISurvey.get_survey_information_class)
+        self.check_not_implemented(WEISurvey.get_algorithm_class)
+        self.check_not_implemented(WEISurvey.get_form_class, None)
+        self.check_not_implemented(WEISurvey.form_valid, None, None)
+        self.check_not_implemented(WEISurvey.is_complete, None)
+        # noinspection PyTypeChecker
+        WEISurvey.update_form(None, None)
+
+        self.assertEqual(CurrentSurvey.get_algorithm_class().get_survey_class(), CurrentSurvey)
+        self.assertEqual(CurrentSurvey.get_year(), 2020)
+
+
+class TestWEISurveyAlgorithm(TestCase):
+    """
+    Run the WEI Algorithm.
+    TODO: Improve this test with some test data once the algorithm will be implemented.
+    """
+    fixtures = ("initial",)
+
+    def setUp(self) -> None:
+        self.year = timezone.now().year
+        self.wei = WEIClub.objects.create(
+            name="Test WEI",
+            email="gc.wei@example.com",
+            parent_club_id=2,
+            membership_fee_paid=12500,
+            membership_fee_unpaid=5500,
+            membership_start=date(self.year, 1, 1),
+            membership_end=date(self.year, 12, 31),
+            year=self.year,
+            date_start=timezone.now().date() + timedelta(days=2),
+            date_end=date(self.year, 12, 31),
+        )
+        NoteClub.objects.create(club=self.wei)
+        self.bus = Bus.objects.create(
+            name="Test Bus",
+            wei=self.wei,
+            description="Test Bus",
+        )
+        self.team = BusTeam.objects.create(
+            name="Test Team",
+            bus=self.bus,
+            color=0xFFFFFF,
+            description="Test Team",
+        )
+
+        self.user = User.objects.create(username="toto")
+        self.registration = WEIRegistration.objects.create(
+            user_id=self.user.id,
+            wei_id=self.wei.id,
+            soge_credit=True,
+            caution_check=True,
+            birth_date=date(2000, 1, 1),
+            gender="nonbinary",
+            clothing_cut="male",
+            clothing_size="XL",
+            health_issues="I am a bot",
+            emergency_contact_name="Pikachu",
+            emergency_contact_phone="+33123456789",
+            ml_events_registration=True,
+            ml_sport_registration=True,
+            ml_art_registration=True,
+            first_year=True,
+        )
+        CurrentSurvey(self.registration).save()
+
+    def test_survey_algorithm(self):
+        CurrentSurvey.get_algorithm_class()().run_algorithm()
diff --git a/apps/wei/views.py b/apps/wei/views.py
index ca63aa9c184a2c52dbb2df6911926320049f3831..696fece9fb139e45cb68e395af61e968b2fe0549 100644
--- a/apps/wei/views.py
+++ b/apps/wei/views.py
@@ -824,10 +824,7 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Crea
         # Force the membership of the clubs BDE and Kfet
         membership._force_renew_parent = True
 
-        if user.profile.paid:
-            fee = club.membership_fee_paid
-        else:
-            fee = club.membership_fee_unpaid
+        fee = club.membership_fee_paid if user.profile.paid else club.membership_fee_unpaid
 
         kfet = club.parent_club
         bde = kfet.parent_club