From 61ad211c39083067d4035ff6ac01d0504aa9b92b Mon Sep 17 00:00:00 2001 From: AlexandreJunod Date: Mon, 11 Dec 2023 15:50:18 +0100 Subject: [PATCH] tests --- geocity/apps/api/serializers.py | 4 +- geocity/apps/api/views.py | 2 +- geocity/tests/api/test_agenda_api.py | 660 ++++++++++++++++++++++----- geocity/tests/factories.py | 6 +- 4 files changed, 556 insertions(+), 116 deletions(-) diff --git a/geocity/apps/api/serializers.py b/geocity/apps/api/serializers.py index 2ef3d5e9f..9d178d8e0 100644 --- a/geocity/apps/api/serializers.py +++ b/geocity/apps/api/serializers.py @@ -934,10 +934,8 @@ def get_available_filters_for_agenda_as_qs(domain): entity = AdministrativeEntity.objects.filter( tags__name=domain ).first() # get can return an error - print(entity) - print(Field.objects.all().values("forms__administrative_entities")) + available_filters = Field.objects.filter(forms__administrative_entities=entity) - print(available_filters) available_filters = available_filters.filter( Q(filter_for_api=True) diff --git a/geocity/apps/api/views.py b/geocity/apps/api/views.py index bc7cd4a25..f9127fe1d 100644 --- a/geocity/apps/api/views.py +++ b/geocity/apps/api/views.py @@ -620,7 +620,7 @@ def get_queryset(self): # Secure the number of query_params to dont be higher than the number of available_filters + 5 # + 5 for optional filters, like startsAt and endsAt, domain if len(query_params) > len(available_filters) + 5: - return None + return submissions # Do the required actions fo every query_param for field_name in query_params: diff --git a/geocity/tests/api/test_agenda_api.py b/geocity/tests/api/test_agenda_api.py index 9b9416d32..f983e0277 100644 --- a/geocity/tests/api/test_agenda_api.py +++ b/geocity/tests/api/test_agenda_api.py @@ -15,51 +15,89 @@ def setUp(self): super().setUp() self.client = APIClient() - self.administrative_entity = factories.AdministrativeEntityFactory(tags=["sit"]) - self.group = factories.SecretariatGroupFactory(department=None) + # ////////////////////////////////////# + # Dates for agenda + # ////////////////////////////////////# + + start_at_valid_1 = datetime.datetime.now( + datetime.timezone.utc + ) + datetime.timedelta(hours=settings.LOCAL_TIME_ZONE_UTC + 1) + ends_at_valid_1 = datetime.datetime.now( + datetime.timezone.utc + ) + datetime.timedelta(days=5) + + start_at_valid_2 = datetime.datetime.now( + datetime.timezone.utc + ) + datetime.timedelta(hours=settings.LOCAL_TIME_ZONE_UTC + 5) + ends_at_valid_2 = datetime.datetime.now( + datetime.timezone.utc + ) + datetime.timedelta(days=3) + + start_at_passed = datetime.datetime.now( + datetime.timezone.utc + ) + datetime.timedelta(days=-10) + ends_at_passed = datetime.datetime.now( + datetime.timezone.utc + ) + datetime.timedelta(days=-5) + + # ////////////////////////////////////# + # First administrative entity (sit) + # ////////////////////////////////////# + + # ////////////////////////////////////# + # Users, groups and administrative entity + # ////////////////////////////////////# + + self.sit_integrator_group = factories.IntegratorGroupFactory(department=None) + self.sit_pilot_group = factories.SecretariatGroupFactory(department=None) + self.sit_administrative_entity = factories.AdministrativeEntityFactory( + tags=["sit"], integrator=self.sit_integrator_group + ) + + factories.IntegratorPermitDepartmentFactory( + administrative_entity=self.sit_administrative_entity, + group=self.sit_integrator_group, + ), + factories.PermitDepartmentFactory( - administrative_entity=self.administrative_entity, + administrative_entity=self.sit_administrative_entity, is_backoffice=True, - group=self.group, + group=self.sit_pilot_group, ), # Create normal User - self.normal_user = factories.UserFactory() + self.sit_normal_user = factories.UserFactory() # ////////////////////////////////////# # Agenda forms # ////////////////////////////////////# # Create valid agenda Forms - self.valid_agenda_form = factories.FormFactory( + self.sit_valid_agenda_form = factories.FormFactory( is_public=True, agenda_visible=True, - administrative_entities=[self.administrative_entity], + administrative_entities=[self.sit_administrative_entity], ) - self.valid_agenda_form.administrative_entities.set([self.administrative_entity]) - self.valid_agenda_form.save() - - self.administrative_entity.forms.add(self.valid_agenda_form.pk) # Create not valid agenda first iteration Forms - self.not_valid_agenda_form_1 = factories.FormFactory( + self.sit_not_valid_agenda_form_1 = factories.FormFactory( is_public=False, agenda_visible=True, - administrative_entities=[self.administrative_entity], + administrative_entities=[self.sit_administrative_entity], ) # Create not valid agenda second iteration Forms - self.not_valid_agenda_form_2 = factories.FormFactory( + self.sit_not_valid_agenda_form_2 = factories.FormFactory( is_public=True, agenda_visible=False, - administrative_entities=[self.administrative_entity], + administrative_entities=[self.sit_administrative_entity], ) # ////////////////////////////////////# # Fields # ////////////////////////////////////# - self.title_field = factories.FieldFactory( + self.sit_title_field = factories.FieldFactory( name="title", api_name="title", api_light=True, @@ -68,7 +106,7 @@ def setUp(self): input_type=forms_models.Field.INPUT_TYPE_TEXT, ) - self.location_field = factories.FieldFactory( + self.sit_location_field = factories.FieldFactory( name="location", api_name="location", api_light=False, @@ -77,7 +115,7 @@ def setUp(self): input_type=forms_models.Field.INPUT_TYPE_TEXT, ) - self.category_field = factories.FieldFactory( + self.sit_category_field = factories.FieldFactory( name="category", api_name="category", api_light=True, @@ -87,226 +125,628 @@ def setUp(self): choices="First\nSecond\nThird", ) + self.sit_private_field = factories.FieldFactory( + name="private_field", + api_name="private_field", + api_light=True, + filter_for_api=False, + public_if_submission_public=False, + input_type=forms_models.Field.INPUT_TYPE_TEXT, + ) + # ////////////////////////////////////# - # Dates for agenda + # Form fields # ////////////////////////////////////# - start_at_valid_1 = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(hours=settings.LOCAL_TIME_ZONE_UTC + 1) - ends_at_valid_1 = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(days=5) + factories.FormFieldFactory( + form=self.sit_valid_agenda_form, + field=self.sit_title_field, + ) - start_at_valid_2 = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(hours=settings.LOCAL_TIME_ZONE_UTC + 5) - ends_at_valid_2 = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(days=3) + factories.FormFieldFactory( + form=self.sit_valid_agenda_form, + field=self.sit_location_field, + ) - start_at_passed = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(days=-10) - ends_at_passed = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(days=-5) + factories.FormFieldFactory( + form=self.sit_valid_agenda_form, + field=self.sit_category_field, + ) + + factories.FormFieldFactory( + form=self.sit_valid_agenda_form, + field=self.sit_private_field, + ) + + factories.FormFieldFactory( + form=self.sit_not_valid_agenda_form_1, + field=self.sit_title_field, + ) + + factories.FormFieldFactory( + form=self.sit_not_valid_agenda_form_2, + field=self.sit_title_field, + ) # ////////////////////////////////////# # Valid submission for agenda, with featured, valid date # ////////////////////////////////////# - self.submission = factories.SubmissionFactory( + self.sit_first_submission = factories.SubmissionFactory( status=submissions_models.Submission.STATUS_PROCESSING, - administrative_entity=self.administrative_entity, - author=self.normal_user, - is_public_agenda=True, # TODO: Duplicate with this at false to be sure not visible + administrative_entity=self.sit_administrative_entity, + author=self.sit_normal_user, + is_public_agenda=True, featured_agenda=True, ) factories.SubmissionGeoTimeFactory( - submission=self.submission, + submission=self.sit_first_submission, starts_at=start_at_valid_1, ends_at=ends_at_valid_1, ) selected_form = factories.SelectedFormFactory( - submission=self.submission, - form=self.valid_agenda_form, + submission=self.sit_first_submission, + form=self.sit_valid_agenda_form, + ) + factories.FieldValueFactory( + field=self.sit_title_field, selected_form=selected_form + ) + factories.FieldValueFactory( + field=self.sit_location_field, selected_form=selected_form ) - factories.FieldValueFactory(field=self.title_field, selected_form=selected_form) factories.FieldValueFactory( - field=self.location_field, selected_form=selected_form + field=self.sit_category_field, + selected_form=selected_form, + value={"val": "First"}, ) factories.FieldValueFactory( - field=self.category_field, selected_form=selected_form + field=self.sit_private_field, selected_form=selected_form ) # ////////////////////////////////////# # Valid submission for agenda, without featured, valid date # ////////////////////////////////////# - self.submission = factories.SubmissionFactory( + self.sit_second_submission = factories.SubmissionFactory( status=submissions_models.Submission.STATUS_PROCESSING, - administrative_entity=self.administrative_entity, - author=self.normal_user, + administrative_entity=self.sit_administrative_entity, + author=self.sit_normal_user, is_public_agenda=True, featured_agenda=False, ) factories.SubmissionGeoTimeFactory( - submission=self.submission, + submission=self.sit_second_submission, starts_at=start_at_valid_1, ends_at=ends_at_valid_1, ) selected_form = factories.SelectedFormFactory( - submission=self.submission, - form=self.valid_agenda_form, + submission=self.sit_second_submission, + form=self.sit_valid_agenda_form, + ) + factories.FieldValueFactory( + field=self.sit_title_field, selected_form=selected_form ) - factories.FieldValueFactory(field=self.title_field, selected_form=selected_form) factories.FieldValueFactory( - field=self.location_field, selected_form=selected_form + field=self.sit_location_field, selected_form=selected_form ) factories.FieldValueFactory( - field=self.category_field, selected_form=selected_form + field=self.sit_category_field, + selected_form=selected_form, + value={"val": "Second"}, + ) + factories.FieldValueFactory( + field=self.sit_private_field, selected_form=selected_form ) # ////////////////////////////////////# # Valid submission for agenda, without featured, valid date but later # ////////////////////////////////////# - self.submission = factories.SubmissionFactory( + self.sit_third_submission = factories.SubmissionFactory( status=submissions_models.Submission.STATUS_PROCESSING, - administrative_entity=self.administrative_entity, - author=self.normal_user, + administrative_entity=self.sit_administrative_entity, + author=self.sit_normal_user, is_public_agenda=True, featured_agenda=False, ) factories.SubmissionGeoTimeFactory( - submission=self.submission, + submission=self.sit_third_submission, starts_at=start_at_valid_2, ends_at=ends_at_valid_2, ) selected_form = factories.SelectedFormFactory( - submission=self.submission, - form=self.valid_agenda_form, + submission=self.sit_third_submission, + form=self.sit_valid_agenda_form, + ) + factories.FieldValueFactory( + field=self.sit_title_field, selected_form=selected_form ) - factories.FieldValueFactory(field=self.title_field, selected_form=selected_form) factories.FieldValueFactory( - field=self.location_field, selected_form=selected_form + field=self.sit_location_field, selected_form=selected_form ) factories.FieldValueFactory( - field=self.category_field, selected_form=selected_form + field=self.sit_category_field, + selected_form=selected_form, + value={"val": "Third"}, + ) + factories.FieldValueFactory( + field=self.sit_private_field, selected_form=selected_form ) # ////////////////////////////////////# # Valid submission for agenda, without featured, passed date # ////////////////////////////////////# - self.submission = factories.SubmissionFactory( + self.sit_fourth_submission = factories.SubmissionFactory( status=submissions_models.Submission.STATUS_PROCESSING, - administrative_entity=self.administrative_entity, - author=self.normal_user, + administrative_entity=self.sit_administrative_entity, + author=self.sit_normal_user, is_public_agenda=True, featured_agenda=False, ) factories.SubmissionGeoTimeFactory( - submission=self.submission, + submission=self.sit_fourth_submission, starts_at=start_at_passed, ends_at=ends_at_passed, ) selected_form = factories.SelectedFormFactory( - submission=self.submission, - form=self.valid_agenda_form, + submission=self.sit_fourth_submission, + form=self.sit_valid_agenda_form, ) - factories.FieldValueFactory(field=self.title_field, selected_form=selected_form) factories.FieldValueFactory( - field=self.location_field, selected_form=selected_form + field=self.sit_title_field, selected_form=selected_form ) factories.FieldValueFactory( - field=self.category_field, selected_form=selected_form + field=self.sit_location_field, selected_form=selected_form + ) + factories.FieldValueFactory( + field=self.sit_category_field, + selected_form=selected_form, + value={"val": "First"}, + ) + factories.FieldValueFactory( + field=self.sit_private_field, selected_form=selected_form ) # ////////////////////////////////////# # Valid submission for agenda, without featured, passed start but still active # ////////////////////////////////////# - self.submission = factories.SubmissionFactory( + self.sit_fifth_submission = factories.SubmissionFactory( status=submissions_models.Submission.STATUS_PROCESSING, - administrative_entity=self.administrative_entity, - author=self.normal_user, + administrative_entity=self.sit_administrative_entity, + author=self.sit_normal_user, is_public_agenda=True, featured_agenda=False, ) factories.SubmissionGeoTimeFactory( - submission=self.submission, + submission=self.sit_fifth_submission, starts_at=start_at_passed, ends_at=ends_at_valid_2, ) selected_form = factories.SelectedFormFactory( - submission=self.submission, - form=self.valid_agenda_form, + submission=self.sit_fifth_submission, + form=self.sit_valid_agenda_form, + ) + factories.FieldValueFactory( + field=self.sit_title_field, selected_form=selected_form + ) + factories.FieldValueFactory( + field=self.sit_location_field, selected_form=selected_form ) - factories.FieldValueFactory(field=self.title_field, selected_form=selected_form) factories.FieldValueFactory( - field=self.location_field, selected_form=selected_form + field=self.sit_category_field, + selected_form=selected_form, + value={"val": "Second"}, ) factories.FieldValueFactory( - field=self.category_field, selected_form=selected_form + field=self.sit_private_field, selected_form=selected_form ) # ////////////////////////////////////# # Invalid submission for agenda, with featured, valid date. Pilot haven't turn public # ////////////////////////////////////# - self.submission = factories.SubmissionFactory( + self.sit_sixth_submission = factories.SubmissionFactory( status=submissions_models.Submission.STATUS_PROCESSING, - administrative_entity=self.administrative_entity, - author=self.normal_user, + administrative_entity=self.sit_administrative_entity, + author=self.sit_normal_user, is_public_agenda=False, featured_agenda=True, ) factories.SubmissionGeoTimeFactory( - submission=self.submission, + submission=self.sit_sixth_submission, starts_at=start_at_valid_1, ends_at=ends_at_valid_1, ) selected_form = factories.SelectedFormFactory( - submission=self.submission, - form=self.valid_agenda_form, + submission=self.sit_sixth_submission, + form=self.sit_valid_agenda_form, + ) + factories.FieldValueFactory( + field=self.sit_title_field, selected_form=selected_form + ) + factories.FieldValueFactory( + field=self.sit_location_field, selected_form=selected_form ) - factories.FieldValueFactory(field=self.title_field, selected_form=selected_form) factories.FieldValueFactory( - field=self.location_field, selected_form=selected_form + field=self.sit_category_field, + selected_form=selected_form, + value={"val": "Third"}, ) factories.FieldValueFactory( - field=self.category_field, selected_form=selected_form + field=self.sit_private_field, selected_form=selected_form + ) + + # ////////////////////////////////////# + # Valid submission for agenda, with featured, valid date but invalid form + # ////////////////////////////////////# + + self.sit_seventh_submission = factories.SubmissionFactory( + status=submissions_models.Submission.STATUS_PROCESSING, + administrative_entity=self.sit_administrative_entity, + author=self.sit_normal_user, + is_public_agenda=True, + featured_agenda=True, + ) + + factories.SubmissionGeoTimeFactory( + submission=self.sit_seventh_submission, + starts_at=start_at_valid_1, + ends_at=ends_at_valid_1, ) + selected_form = factories.SelectedFormFactory( + submission=self.sit_seventh_submission, + form=self.sit_not_valid_agenda_form_1, + ) + factories.FieldValueFactory( + field=self.sit_title_field, selected_form=selected_form + ) + + # ////////////////////////////////////# + # Valid submission for agenda, with featured, valid date but invalid form 2 + # ////////////////////////////////////# + + self.sit_eighth_submission = factories.SubmissionFactory( + status=submissions_models.Submission.STATUS_PROCESSING, + administrative_entity=self.sit_administrative_entity, + author=self.sit_normal_user, + is_public_agenda=True, + featured_agenda=True, + ) + + factories.SubmissionGeoTimeFactory( + submission=self.sit_eighth_submission, + starts_at=start_at_valid_1, + ends_at=ends_at_valid_1, + ) + selected_form = factories.SelectedFormFactory( + submission=self.sit_eighth_submission, + form=self.sit_not_valid_agenda_form_2, + ) + factories.FieldValueFactory( + field=self.sit_title_field, selected_form=selected_form + ) + + # ////////////////////////////////////# + # Second administrative entity (fin) + # ////////////////////////////////////# + + # ////////////////////////////////////# + # Users, groups and administrative entity + # ////////////////////////////////////# + + self.fin_integrator_group = factories.IntegratorGroupFactory(department=None) + self.fin_group = factories.SecretariatGroupFactory(department=None) + self.fin_administrative_entity = factories.AdministrativeEntityFactory( + tags=["fin"], integrator=self.fin_integrator_group + ) + + factories.IntegratorPermitDepartmentFactory( + administrative_entity=self.fin_administrative_entity, + group=self.fin_integrator_group, + ), + + factories.PermitDepartmentFactory( + administrative_entity=self.fin_administrative_entity, + is_backoffice=True, + group=self.fin_group, + ), - def test_test_test_test(self): + # Create normal User + self.fin_normal_user = factories.UserFactory() + + # ////////////////////////////////////# + # Agenda form + # ////////////////////////////////////# + + # Create valid agenda Form + self.fin_valid_agenda_form = factories.FormFactory( + is_public=True, + agenda_visible=True, + administrative_entities=[self.fin_administrative_entity], + ) + + # ////////////////////////////////////# + # Fields + # ////////////////////////////////////# + + self.fin_title_field = factories.FieldFactory( + name="title", + api_name="title", + api_light=True, + filter_for_api=False, + public_if_submission_public=True, + input_type=forms_models.Field.INPUT_TYPE_TEXT, + ) + + self.fin_location_field = factories.FieldFactory( + name="location", + api_name="location", + api_light=False, + filter_for_api=False, + public_if_submission_public=True, + input_type=forms_models.Field.INPUT_TYPE_TEXT, + ) + + self.fin_category_field = factories.FieldFactory( + name="category", + api_name="category", + api_light=True, + filter_for_api=True, + public_if_submission_public=True, + input_type=forms_models.Field.INPUT_TYPE_LIST_MULTIPLE, + choices="One\nTwo\nThree", + ) + + # ////////////////////////////////////# + # Form fields + # ////////////////////////////////////# + + factories.FormFieldFactory( + form=self.fin_valid_agenda_form, + field=self.fin_title_field, + ) + + factories.FormFieldFactory( + form=self.fin_valid_agenda_form, + field=self.fin_location_field, + ) + + factories.FormFieldFactory( + form=self.fin_valid_agenda_form, + field=self.fin_category_field, + ) + + # ////////////////////////////////////# + # Valid submission for agenda, with featured, valid date + # ////////////////////////////////////# + + self.fin_first_submission = factories.SubmissionFactory( + status=submissions_models.Submission.STATUS_PROCESSING, + administrative_entity=self.fin_administrative_entity, + author=self.fin_normal_user, + is_public_agenda=True, + featured_agenda=True, + ) + + factories.SubmissionGeoTimeFactory( + submission=self.fin_first_submission, + starts_at=start_at_valid_1, + ends_at=ends_at_valid_1, + ) + selected_form = factories.SelectedFormFactory( + submission=self.fin_first_submission, + form=self.fin_valid_agenda_form, + ) + factories.FieldValueFactory( + field=self.fin_title_field, selected_form=selected_form + ) + factories.FieldValueFactory( + field=self.fin_location_field, selected_form=selected_form + ) + factories.FieldValueFactory( + field=self.fin_category_field, + selected_form=selected_form, + value={"val": "Premier"}, + ) + + def test_light_and_detailed_works_correctly(self): + """ + Light api should show multiple objects, have a next, previous, count, features. + Detailed should show infos that are api_light=False. + Field not public should not appear. + Invalid configuration should not appear. + """ + + # ////////////////////////////////////# + # Light API + # ////////////////////////////////////# + + # Request to agenda-list (light API) + response = self.client.get(reverse("agenda-list"), {}) + response_json = response.json() + + # Check if request is ok + self.assertEqual(response.status_code, 200) + + # Check if there's a next + self.assertContains(response, "next") + + # Check if there's a previous + self.assertContains(response, "previous") + + # Check if there's a count (multiple objects) + self.assertContains(response, "count") + + # Check if there's features (same number as count) + self.assertEqual(len(response_json["features"]), response_json["count"]) + + # Check private field doesn't appear + self.assertNotContains(response, "private_field") + + # Check api_light=False field doesn't appear + self.assertNotContains(response, "location") + + # ////////////////////////////////////# + # Detailed API + # ////////////////////////////////////# + + # Request to agenda_detail (detailed API) + response = self.client.get( + reverse("agenda-detail", kwargs={"pk": self.sit_first_submission.pk}), {} + ) + response_json = response.json() + + # Check if request is ok + self.assertEqual(response.status_code, 200) + + # Check there's not a next + self.assertNotContains(response, "next") + + # Check there's not a previous + self.assertNotContains(response, "previous") + + # Check there's not a count (multiple objects) + self.assertNotContains(response, "count") + + # Check private field doesn't appear + self.assertNotContains(response, "private_field") + + # Check api_light=False field appears in detailed + self.assertContains(response, "location") + + def test_filters_only_appears_with_domain(self): + """ + A domain is required to show filters. + """ + + # ////////////////////////////////////# + # Without domain + # ////////////////////////////////////# + + # Request to agenda-list (light API) + response = self.client.get(reverse("agenda-list"), {}) + response_json = response.json() + + # Check if request is ok + self.assertEqual(response.status_code, 200) + + # Check if filters is None + self.assertEqual(response_json["filters"], None) + + # ////////////////////////////////////# + # With domain + # ////////////////////////////////////# + + # Request to agenda-list (light API) on ?domain=sit response = self.client.get(reverse("agenda-list"), {"domain": "sit"}) response_json = response.json() - print(response_json) - # print(self.title_field) - # print(self.title_field.api_light) - # print(self.title_field.public_if_submission_public) - self.assertEqual(response.status_code, 403) + + # Check if request is ok + self.assertEqual(response.status_code, 200) + + # Check if filters is not None + self.assertNotEqual(response_json["filters"], None) + + def test_elements_are_ordered_by_featured_and_dates(self): + """ + Order of elements logic is in the backend. + Featured should appear first and everything should be sorted by date. + By default only return events that are in progress or still to come. + """ + + # Request to agenda-list (light API) + response = self.client.get(reverse("agenda-list"), {}) + response_json = response.json() + + # Check if request is ok + self.assertEqual(response.status_code, 200) + + # Check first element is first_submission + self.assertEqual( + response_json["features"][0]["properties"]["id"], + self.sit_first_submission.pk, + ) + + # Check second element is fifth_submission + self.assertEqual( + response_json["features"][1]["properties"]["id"], + self.sit_fifth_submission.pk, + ) + + # Check third element is second_submission + self.assertEqual( + response_json["features"][2]["properties"]["id"], + self.sit_second_submission.pk, + ) + + # Check fourth element is third_submission self.assertEqual( - response_json["detail"], - "Vous n'avez pas la permission d'effectuer cette action.", + response_json["features"][3]["properties"]["id"], + self.sit_third_submission.pk, ) + def test_filters_work_correctly(self): + """ + Filters by domain, date and custom filters does return the expected result. + """ + + # ////////////////////////////////////# + # Filter by domain + # ////////////////////////////////////# + + # Request to agenda-list (light API) on ?domain=sit + response_sit = self.client.get(reverse("agenda-list"), {"domain": "sit"}) + response_json_sit = response_sit.json() -# Test avec tous les status, s'affichent qu'avec les bons status # TODO: MAKE DATA OR IGNORE AS IT IS EASY TO KNOW IF IT WORKS -# Test élément dans light et pas élément pas dans light # DATA DISPO -# Test configuration, si le moindre élément manque, rien ne s'affiche # TODO: Make more data, some parts missing, only able to do on submission. Need more selected_form: form=self.valid_agenda_form, -# Les filtres apparaissent que s'il y a un domaine # DATA DISPO -# Check order element (features, dates) # DATA DISPO -# Check filters work correctly (domaines, types, dates, etc..) # DATA DISPO -# Check if filters work correctly together, when we put multiple times # TODO: make data -# Check if too much filters throw an error # DATA DISPO -# Check le queryset par defaut : date comprises entre aujourd'hui et x # DATA DISPO -# TODO : Make another entity with another tag, and check if data doesn't appear + # Request to agenda-list (light API) on ?domain=fin + response_fin = self.client.get(reverse("agenda-list"), {"domain": "fin"}) + response_json_fin = response_fin.json() + + # Check if request is ok for sit + self.assertEqual(response_sit.status_code, 200) + + # Check if request is ok for fin + self.assertEqual(response_fin.status_code, 200) + + # Check number of submissions is different in two entities + self.assertNotEqual(response_json_sit["count"], response_json_fin["count"]) + + # Check filters are not empty + self.assertNotEqual(response_json_sit["filters"], None) + self.assertNotEqual(response_json_fin["filters"], None) + + # Check filters are different + self.assertNotEqual(response_json_sit["filters"], response_json_fin["filters"]) + + # Check if valid elements of sit doesn't appear in fin, as there's only 1 element valid in fin + self.assertEqual(response_json_fin["count"], 1) + + # ////////////////////////////////////# + # Filter by custom filter + # ////////////////////////////////////# + + # Request to agenda-list (light API) on ?domain=sit + response = self.client.get( + reverse("agenda-list"), {"domain": "sit", "category": 0} + ) + response_json = response.json() + + # Check if request is ok + self.assertEqual(response.status_code, 200) + + # Check if there's only 1 feature + self.assertEqual(response_json["count"], 1) + + # Check if this is the first_submission + self.assertEqual( + response_json["features"][0]["properties"]["id"], + self.sit_first_submission.pk, + ) diff --git a/geocity/tests/factories.py b/geocity/tests/factories.py index e561223b2..7caf5afc8 100644 --- a/geocity/tests/factories.py +++ b/geocity/tests/factories.py @@ -76,6 +76,9 @@ def groups(self, create, extracted, **kwargs): self.groups.add(group) +# FIXME: Integrator is mandatory in AdministrativeEntity. +# In AgendaAPITestCase nothing was working cause FormFactory couldn't link to administrative entity. +# The error was : accounts.AdministrativeEntity.None class AdministrativeEntityFactory(factory.django.DjangoModelFactory): ofs_id = 0 name = factory.Faker("company") @@ -384,9 +387,8 @@ def integrator(self, create, extracted, **kwargs): def administrative_entities(self, create, extracted, **kwargs): if not create or not extracted: return - print(*extracted) + self.administrative_entities.add(*extracted) - print(self.administrative_entities) class FormWithoutGeometryFactory(factory.django.DjangoModelFactory):