Parcourir la source

Validate that floor index >= floors number

Jocelyn Delande il y a 9 ans
Parent
commit
bae17a8e03
2 fichiers modifiés avec 22 ajouts et 0 suppressions
  1. 11 0
      wifiwithme/apps/contribmap/forms.py
  2. 11 0
      wifiwithme/apps/contribmap/tests.py

+ 11 - 0
wifiwithme/apps/contribmap/forms.py

@@ -59,9 +59,20 @@ class PublicContribForm(forms.ModelForm):
             self.add_error('phone', msg)
             self.add_error('email', msg)
 
+    def _validate_floors(self, data):
+        if None in (data.get('floor'), data.get('floor_total')):
+            return
+
+        if (data.get('floor') > data.get('floor_total')):
+            self.add_error(
+                'floor',
+                "L'étage doit être inférieur ou égal au nombre d'étages",
+            )
+
     def clean(self):
         cleaned_data = super().clean()
         self._validate_contact_information(cleaned_data)
+        self._validate_floors(cleaned_data)
         return cleaned_data
 
     def privacy_fields(self):

+ 11 - 0
wifiwithme/apps/contribmap/tests.py

@@ -168,6 +168,17 @@ class TestForms(TestCase):
         self.assertTrue(PublicContribForm(email_contact).is_valid())
         self.assertTrue(PublicContribForm(both_contact).is_valid())
 
+    def test_floors_validation(self):
+        invalid_floors = self.valid_data.copy()
+        invalid_floors['floor'] = 2
+        invalid_floors['floor_total'] = 1
+
+        self.assertFalse(PublicContribForm(invalid_floors).is_valid())
+        self.assertTrue(PublicContribForm(self.valid_data).is_valid())
+
+        invalid_floors['floor'] = None
+        invalid_floors['floor_total'] = None
+        self.assertTrue(PublicContribForm(invalid_floors).is_valid())
 
 class TestDataImport(TestCase):
     fixtures = ['bottle_data.yaml']