From 1db6a267cfd363b7c277e58544ac15bd4d6e1c6c Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Mon, 11 Dec 2023 19:42:40 +0100 Subject: [PATCH 1/5] fixed issue expired events --- app/common/enums.py | 1 + app/content/views/event.py | 12 +++++---- app/tests/conftest.py | 6 +++++ app/tests/content/test_event_integration.py | 30 +++++++++++++++------ 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/app/common/enums.py b/app/common/enums.py index 94a50df75..83fd2ded7 100644 --- a/app/common/enums.py +++ b/app/common/enums.py @@ -43,6 +43,7 @@ class Groups(ChoiceEnum): JUBKOM = "JubKom" REDAKSJONEN = "Redaksjonen" FONDET = "Forvaltningsgruppen" + PLASK = "Plask" class AppModel(ChoiceEnum): diff --git a/app/content/views/event.py b/app/content/views/event.py index 334dd8b1f..bce7f028a 100644 --- a/app/content/views/event.py +++ b/app/content/views/event.py @@ -69,14 +69,16 @@ def _list_queryset(self): if activity and category: return self._list_activity_queryset(category, expired, time) + if ( + expired and + category and + not activity + ): + return self.queryset.filter(end_date__lt=time).filter(~Q(category=category)) + if expired: return self.queryset.filter(end_date__lt=time).order_by("-start_date") - if category: - return self.queryset.filter(end_date__gte=time).filter( - ~Q(category=category) - ) - return self.queryset.filter(end_date__gte=time) def _list_activity_queryset(self, category, expired, time): diff --git a/app/tests/conftest.py b/app/tests/conftest.py index 7528ffdc3..a9b79b5bc 100644 --- a/app/tests/conftest.py +++ b/app/tests/conftest.py @@ -112,6 +112,12 @@ def jubkom_member(member): return member +@pytest.fixture() +def plask_member(member): + add_user_to_group_with_name(member, Groups.PLASK) + return member + + @pytest.fixture() def member_client(member): return get_api_client(user=member) diff --git a/app/tests/content/test_event_integration.py b/app/tests/content/test_event_integration.py index a8b793f9c..961298dab 100644 --- a/app/tests/content/test_event_integration.py +++ b/app/tests/content/test_event_integration.py @@ -174,10 +174,7 @@ def test_list_as_anonymous_user(default_client, event): """An anonymous user should be able to list all events that are not activities.""" category = Category.objects.create(text="Aktivitet") - activity = EventFactory(category=category) - - activity.category = category - activity.save() + EventFactory(category=category) event.category = None event.save() @@ -192,10 +189,7 @@ def test_list_activities_as_anonymous_user(default_client, event): """An anonymous user should be able to list all activities.""" category = Category.objects.create(text="Aktivitet") - activity = EventFactory(category=category) - - activity.category = category - activity.save() + EventFactory(category=category) event.category = None event.save() @@ -206,6 +200,26 @@ def test_list_activities_as_anonymous_user(default_client, event): assert response.json().get("count") == 1 +@pytest.mark.django_db +def test_list_expired_events_as_anonymous_user(default_client, event): + """ + An anonymous user should be able to list all expired events. + Activites should not be included. + """ + + two_days_ago = now() - timedelta(days=1) + event.end_date = two_days_ago + event.save() + + category = Category.objects.create(text="Aktivitet") + EventFactory(end_date=two_days_ago, category=category) + + response = default_client.get(f"{API_EVENTS_BASE_URL}?expired=true") + + assert response.status_code == 200 + assert response.json().get("count") == 1 + + @pytest.mark.django_db def test_retrieve_as_anonymous_user(default_client, event): """An anonymous user should be able to retrieve an event.""" From 595ca61a858b176c174ee0ab477ef98d9ce10c89 Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Mon, 11 Dec 2023 20:07:18 +0100 Subject: [PATCH 2/5] needs a fix --- app/content/views/event.py | 8 ++++++-- app/tests/content/test_event_integration.py | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/content/views/event.py b/app/content/views/event.py index bce7f028a..445d498a4 100644 --- a/app/content/views/event.py +++ b/app/content/views/event.py @@ -63,6 +63,7 @@ def _list_queryset(self): return self.queryset activity = self.request.query_params.get("activity", "false").lower() == "true" + show_all = self.request.query_params.get("all", "false").lower() == "true" category = Category.objects.filter(text=CategoryEnum.ACTIVITY).first() expired = self.request.query_params.get("expired", "false").lower() == "true" @@ -76,10 +77,13 @@ def _list_queryset(self): ): return self.queryset.filter(end_date__lt=time).filter(~Q(category=category)) + if show_all: + return self.queryset.filter(end_date__gte=time) + if expired: return self.queryset.filter(end_date__lt=time).order_by("-start_date") - - return self.queryset.filter(end_date__gte=time) + + return self.queryset.filter(~Q(category=category)) def _list_activity_queryset(self, category, expired, time): if expired: diff --git a/app/tests/content/test_event_integration.py b/app/tests/content/test_event_integration.py index 961298dab..d1b999820 100644 --- a/app/tests/content/test_event_integration.py +++ b/app/tests/content/test_event_integration.py @@ -171,7 +171,7 @@ def permission_test_util( @pytest.mark.django_db def test_list_as_anonymous_user(default_client, event): - """An anonymous user should be able to list all events that are not activities.""" + """An anonymous user should be able to list all events. Activities should included.""" category = Category.objects.create(text="Aktivitet") EventFactory(category=category) @@ -184,6 +184,22 @@ def test_list_as_anonymous_user(default_client, event): assert response.json().get("count") == 1 +@pytest.mark.django_db +def test_list_events_as_anonymous_user(default_client, event): + """An anonymous user should be able to list all events. Activities should not be included.""" + + category = Category.objects.create(text="Aktivitet") + EventFactory(category=category) + + event.category = None + event.save() + + response = default_client.get(f"{API_EVENTS_BASE_URL}?all=true/") + + assert response.status_code == 200 + assert response.json().get("count") == 2 + + @pytest.mark.django_db def test_list_activities_as_anonymous_user(default_client, event): """An anonymous user should be able to list all activities.""" From 17114ec5ce79de937d500855aa8782976be8e44e Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Tue, 12 Dec 2023 14:47:25 +0100 Subject: [PATCH 3/5] fixed bugs --- app/content/views/event.py | 30 +++++++++------------ app/tests/content/test_event_integration.py | 24 +++++++++++++---- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/app/content/views/event.py b/app/content/views/event.py index 445d498a4..651e187a8 100644 --- a/app/content/views/event.py +++ b/app/content/views/event.py @@ -62,28 +62,24 @@ def _list_queryset(self): ): return self.queryset - activity = self.request.query_params.get("activity", "false").lower() == "true" - show_all = self.request.query_params.get("all", "false").lower() == "true" - category = Category.objects.filter(text=CategoryEnum.ACTIVITY).first() expired = self.request.query_params.get("expired", "false").lower() == "true" + activity = self.request.query_params.get("activity", None) - if activity and category: - return self._list_activity_queryset(category, expired, time) + if activity == None: + if expired: + return self.queryset.filter(end_date__lt=time).order_by("-start_date") + return self.queryset.filter(end_date__gte=time) - if ( - expired and - category and - not activity - ): - return self.queryset.filter(end_date__lt=time).filter(~Q(category=category)) + category = Category.objects.filter(text=CategoryEnum.ACTIVITY).first() + if category and activity.lower() == "true": + return self._list_activity_queryset(category, expired, time) - if show_all: - return self.queryset.filter(end_date__gte=time) + if category and activity.lower() == "false": + if expired: + return self.queryset.filter(end_date__lt=time).filter(~Q(category=category)).order_by("-start_date") + return self.queryset.filter(~Q(category=category)) - if expired: - return self.queryset.filter(end_date__lt=time).order_by("-start_date") - - return self.queryset.filter(~Q(category=category)) + return self.queryset.filter(end_date__gte=time) def _list_activity_queryset(self, category, expired, time): if expired: diff --git a/app/tests/content/test_event_integration.py b/app/tests/content/test_event_integration.py index d1b999820..89eae6157 100644 --- a/app/tests/content/test_event_integration.py +++ b/app/tests/content/test_event_integration.py @@ -181,7 +181,7 @@ def test_list_as_anonymous_user(default_client, event): response = default_client.get(API_EVENTS_BASE_URL) assert response.status_code == 200 - assert response.json().get("count") == 1 + assert response.json().get("count") == 2 @pytest.mark.django_db @@ -194,10 +194,10 @@ def test_list_events_as_anonymous_user(default_client, event): event.category = None event.save() - response = default_client.get(f"{API_EVENTS_BASE_URL}?all=true/") + response = default_client.get(f"{API_EVENTS_BASE_URL}?activity=false") assert response.status_code == 200 - assert response.json().get("count") == 2 + assert response.json().get("count") == 1 @pytest.mark.django_db @@ -220,15 +220,29 @@ def test_list_activities_as_anonymous_user(default_client, event): def test_list_expired_events_as_anonymous_user(default_client, event): """ An anonymous user should be able to list all expired events. - Activites should not be included. """ two_days_ago = now() - timedelta(days=1) event.end_date = two_days_ago event.save() + response = default_client.get(f"{API_EVENTS_BASE_URL}?expired=true") + + assert response.status_code == 200 + assert response.json().get("count") == 1 + + +@pytest.mark.django_db +def test_list_expired_activities_as_anonymous_user(default_client, event): + """ + An anonymous user should be able to list all expired activities. + """ + + two_days_ago = now() - timedelta(days=1) category = Category.objects.create(text="Aktivitet") - EventFactory(end_date=two_days_ago, category=category) + event.end_date = two_days_ago + event.category = category + event.save() response = default_client.get(f"{API_EVENTS_BASE_URL}?expired=true") From 7bdedc8cecb9807f3d8c7c77e3e1d9809a64597b Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Tue, 12 Dec 2023 14:48:40 +0100 Subject: [PATCH 4/5] format --- app/content/views/event.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/content/views/event.py b/app/content/views/event.py index 651e187a8..b4ece2a9d 100644 --- a/app/content/views/event.py +++ b/app/content/views/event.py @@ -76,7 +76,11 @@ def _list_queryset(self): if category and activity.lower() == "false": if expired: - return self.queryset.filter(end_date__lt=time).filter(~Q(category=category)).order_by("-start_date") + return ( + self.queryset.filter(end_date__lt=time) + .filter(~Q(category=category)) + .order_by("-start_date") + ) return self.queryset.filter(~Q(category=category)) return self.queryset.filter(end_date__gte=time) From 62543dbaa7c0e1472a651355740cc3d8fb2eeb35 Mon Sep 17 00:00:00 2001 From: Mads Nylund Date: Tue, 12 Dec 2023 14:50:06 +0100 Subject: [PATCH 5/5] format --- app/content/views/event.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/content/views/event.py b/app/content/views/event.py index b4ece2a9d..4d5c34f02 100644 --- a/app/content/views/event.py +++ b/app/content/views/event.py @@ -65,7 +65,7 @@ def _list_queryset(self): expired = self.request.query_params.get("expired", "false").lower() == "true" activity = self.request.query_params.get("activity", None) - if activity == None: + if activity is None: if expired: return self.queryset.filter(end_date__lt=time).order_by("-start_date") return self.queryset.filter(end_date__gte=time)