Skip to content

Commit cb01eca

Browse files
k9845frozenhelium
authored andcommitted
Allow superuser to view all dref
1 parent 09c3067 commit cb01eca

File tree

2 files changed

+70
-17
lines changed

2 files changed

+70
-17
lines changed

dref/test_views.py

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ def test_dref_is_published(self):
446446
)
447447
url = f'/api/v2/dref/{dref.id}/'
448448
data = {
449-
"title" : "New Update Title"
449+
"title": "New Update Title"
450450
}
451451
self.client.force_authenticate(self.user)
452452
response = self.client.patch(url, data)
@@ -795,3 +795,55 @@ def test_dref_for_assessment_report(self):
795795
response = self.client.post(url, data)
796796
self.assertEqual(response.status_code, 201)
797797
self.assertEqual(Dref.objects.count(), old_count + 1)
798+
799+
def test_dref_for_super_user(self):
800+
user1 = UserFactory.create(
801+
username='[email protected]',
802+
first_name='Test',
803+
last_name='User1',
804+
password='admin123',
805+
806+
is_superuser=True,
807+
)
808+
user2 = UserFactory.create(
809+
username='[email protected]',
810+
first_name='Test',
811+
last_name='User2',
812+
password='admin123',
813+
814+
)
815+
user3 = UserFactory.create(
816+
username='[email protected]',
817+
first_name='Test',
818+
last_name='User3',
819+
password='admin123',
820+
821+
)
822+
dref1 = DrefFactory.create(
823+
title='Test Title',
824+
created_by=user2,
825+
)
826+
DrefFactory.create(
827+
title='Test Title New',
828+
)
829+
830+
# authenticate with user1(superuser)
831+
# user1 should be able to view all dref
832+
url = '/api/v2/dref/'
833+
self.client.force_authenticate(user1)
834+
response = self.client.get(url)
835+
self.assertEqual(response.status_code, 200)
836+
self.assertEqual(len(response.data['results']), 2)
837+
838+
# authenticate with User2
839+
self.client.force_authenticate(user2)
840+
response = self.client.get(url)
841+
self.assertEqual(response.status_code, 200)
842+
self.assertEqual(len(response.data['results']), 1)
843+
self.assertEqual(response.data['results'][0]['id'], dref1.id)
844+
845+
# authenticate with User3
846+
self.client.force_authenticate(user3)
847+
response = self.client.get(url)
848+
self.assertEqual(response.status_code, 200)
849+
self.assertEqual(len(response.data['results']), 0)

dref/views.py

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@ class DrefViewSet(viewsets.ModelViewSet):
4040
filterset_class = DrefFilter
4141

4242
def get_queryset(self):
43-
return Dref.objects\
44-
.filter(
45-
models.Q(created_by=self.request.user) |
46-
models.Q(users=self.request.user)
47-
)\
48-
.prefetch_related(
49-
'planned_interventions',
50-
'needs_identified',
51-
'national_society_actions',
52-
'users'
53-
).order_by('-created_at').distinct()
43+
user = self.request.user
44+
queryset = Dref.objects.prefetch_related(
45+
'planned_interventions',
46+
'needs_identified',
47+
'national_society_actions',
48+
'users'
49+
).order_by('-created_at').distinct()
50+
if user.is_superuser:
51+
return queryset
52+
else:
53+
return queryset.filter(models.Q(created_by=user) | models.Q(users=user))
5454

5555
@action(
5656
detail=True,
@@ -74,10 +74,8 @@ class DrefOperationalUpdateViewSet(viewsets.ModelViewSet):
7474
filterset_class = DrefOperationalUpdateFilter
7575

7676
def get_queryset(self):
77-
return DrefOperationalUpdate.objects.filter(
78-
models.Q(created_by=self.request.user) |
79-
models.Q(users=self.request.user)
80-
).select_related(
77+
user = self.request.user
78+
queryset = DrefOperationalUpdate.objects.select_related(
8179
'national_society',
8280
'national_society',
8381
'disaster_type',
@@ -94,6 +92,10 @@ def get_queryset(self):
9492
'images',
9593
'photos',
9694
).order_by('-created_at').distinct()
95+
if user.is_superuser:
96+
return queryset
97+
else:
98+
return queryset.filter(models.Q(created_by=user) | models.Q(users=user))
9799

98100
@action(
99101
detail=True,
@@ -121,7 +123,6 @@ def get_queryset(self):
121123
'dref__needs_identified',
122124
).order_by('-created_at').distinct()
123125

124-
125126
@action(
126127
detail=True,
127128
url_path='publish',

0 commit comments

Comments
 (0)