Parcourir la source

Validate the required fields for share contrib

For fields required only if the contrib type is a will to share a connection.
Jocelyn Delande il y a 9 ans
Parent
commit
882005fd29
2 fichiers modifiés avec 20 ajouts et 0 suppressions
  1. 7 0
      wifiwithme/apps/contribmap/forms.py
  2. 13 0
      wifiwithme/apps/contribmap/tests.py

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

@@ -69,10 +69,17 @@ class PublicContribForm(forms.ModelForm):
                 "L'étage doit être inférieur ou égal au nombre d'étages",
             )
 
+    def _validate_share_fields(self, data):
+        if data.get('contrib_type') == Contrib.CONTRIB_SHARE:
+            for required_field in ('access_type', 'bandwidth', 'share_part'):
+                if data.get(required_field, '') is None:
+                    self.add_error(required_field, 'Ce champ est requis')
+
     def clean(self):
         cleaned_data = super().clean()
         self._validate_contact_information(cleaned_data)
         self._validate_floors(cleaned_data)
+        self._validate_share_fields(cleaned_data)
         return cleaned_data
 
     def privacy_fields(self):

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

@@ -180,6 +180,19 @@ class TestForms(TestCase):
         invalid_floors['floor_total'] = None
         self.assertTrue(PublicContribForm(invalid_floors).is_valid())
 
+    def test_share_fields_validation(self):
+        data = self.valid_data.copy()
+        data['contrib_type'] = 'share'
+
+        self.assertFalse(PublicContribForm(data).is_valid())
+        data['access_type'] = 'cable'
+        self.assertFalse(PublicContribForm(data).is_valid())
+        data['bandwidth'] = 12
+        self.assertFalse(PublicContribForm(data).is_valid())
+        data['share_part'] = 5
+        self.assertTrue(PublicContribForm(data).is_valid())
+
+
 class TestDataImport(TestCase):
     fixtures = ['bottle_data.yaml']