Skip to content

Commit

Permalink
Merge 3c1c958 into e1ae079
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisLovering committed May 10, 2024
2 parents e1ae079 + 3c1c958 commit 68c2e70
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
13 changes: 10 additions & 3 deletions pydis_site/apps/api/tests/test_reminders.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ def test_delete_known_reminder_returns_204(self):
response = self.client.delete(url)

self.assertEqual(response.status_code, 204)
self.assertRaises(Reminder.DoesNotExist, Reminder.objects.get, id=self.reminder.id)


class ReminderListTests(AuthenticatedAPITestCase):
Expand Down Expand Up @@ -154,18 +153,26 @@ def test_reminders_in_full_list(self):
response = self.client.get(url)

self.assertEqual(response.status_code, 200)
self.assertNotIn(self.rem_dict_two, response.json())

response = self.client.get(f"{url}?include_inactive=true")
self.assertCountEqual(response.json(), [self.rem_dict_one, self.rem_dict_two])

def test_filter_search(self):
url = reverse('api:bot:reminder-list')
response = self.client.get(f'{url}?search={self.author.name}')
self.assertEqual(response.status_code, 200)
self.assertCountEqual(response.json(), [self.rem_dict_one])

def test_filter_search_with_inactive(self):
url = reverse('api:bot:reminder-list')
response = self.client.get(f'{url}?search={self.author.name}&include_inactive=true')
self.assertEqual(response.status_code, 200)
self.assertCountEqual(response.json(), [self.rem_dict_one, self.rem_dict_two])

def test_filter_field(self):
def test_only_active_by_default(self):
url = reverse('api:bot:reminder-list')
response = self.client.get(f'{url}?active=true')
response = self.client.get(url)

self.assertEqual(response.status_code, 200)
self.assertEqual(response.json(), [self.rem_dict_one])
Expand Down
18 changes: 18 additions & 0 deletions pydis_site/apps/api/viewsets/bot/reminder.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.request import Request
from rest_framework.filters import SearchFilter
from rest_framework.mixins import (
CreateModelMixin,
Expand Down Expand Up @@ -113,6 +114,7 @@ class ReminderViewSet(
### DELETE /bot/reminders/<id:int>
Delete the reminder with the given `id`.
This is a soft-delete by setting `active` to False.
#### Status codes
- 204: returned on success
Expand All @@ -126,3 +128,19 @@ class ReminderViewSet(
queryset = Reminder.objects.prefetch_related('author')
filter_backends = (DjangoFilterBackend, SearchFilter)
filterset_fields = ('active', 'author__id')

def perform_destroy(self, instance: Reminder) -> None:
"""Soft-delete reminders when DELETE is called."""
instance.active = False
instance.save()

def get_queryset(self) -> list[Reminder]:
"""Filter out soft-deleted reminders by default."""
queryset = Reminder.objects.prefetch_related('author')
request: Request = self.request

include_inactive = request.query_params.get("include_inactive", "false")
include_inactive = include_inactive.lower() == "true"
if not include_inactive:
queryset = queryset.filter(active=True)
return queryset

0 comments on commit 68c2e70

Please sign in to comment.