Skip to content

Commit 893528c

Browse files
committed
add the blacklist changeset filter field
1 parent 3de61ac commit 893528c

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

osmchadjango/changeset/filters.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ class ChangesetFilter(GeoFilterSet):
8181
help_text="""If True, it will exclude the changesets created by the
8282
users that you whitelisted."""
8383
)
84+
blacklist = filters.BooleanFilter(
85+
name=None,
86+
method='filter_blacklist',
87+
widget=BooleanWidget(),
88+
help_text="""If True, it will get only the changesets created by the
89+
users that you blacklisted."""
90+
)
8491
area_lt = filters.CharFilter(
8592
name=None,
8693
method='filter_area_lt',
@@ -216,6 +223,16 @@ def filter_whitelist(self, queryset, name, value):
216223
else:
217224
return queryset
218225

226+
def filter_blacklist(self, queryset, name, value):
227+
if (self.request is None or self.request.user.is_authenticated) and value:
228+
blacklist = self.request.user.blacklisteduser_set.values_list(
229+
'uid',
230+
flat=True
231+
)
232+
return queryset.filter(uid__in=blacklist)
233+
else:
234+
return queryset
235+
219236
def filter_checked_by(self, queryset, name, value):
220237
if (self.request is None or self.request.user.is_authenticated) and value:
221238
lookup = '__'.join([name, 'name__in'])

osmchadjango/changeset/tests/test_changeset_views.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from rest_framework.test import APITestCase
99

1010
from ...users.models import User
11+
from ...supervise.models import BlacklistedUser
1112
from ..models import SuspicionReasons, Tag, Changeset
1213
from ..views import ChangesetListAPIView, PaginatedCSVRenderer
1314
from .modelfactories import (
@@ -117,6 +118,36 @@ def test_hide_whitelist_filter(self):
117118
self.assertEqual(response.status_code, 200)
118119
self.assertEqual(response.data['count'], 0)
119120

121+
def test_blacklisted_filter(self):
122+
"""Test getting changesets filtered by blacklisted users"""
123+
ChangesetFactory(uid=444, user='the_user')
124+
BlacklistedUser.objects.create(
125+
uid='123123',
126+
username='test',
127+
added_by=self.user
128+
)
129+
self.client.login(username=self.user.username, password='password')
130+
response = self.client.get(self.url, {'blacklist': 'false'})
131+
self.assertEqual(response.status_code, 200)
132+
self.assertEqual(response.data['count'], 53)
133+
134+
response = self.client.get(self.url)
135+
self.assertEqual(response.status_code, 200)
136+
self.assertEqual(response.data['count'], 53)
137+
138+
response = self.client.get(self.url, {'blacklist': 'true'})
139+
self.assertEqual(response.status_code, 200)
140+
self.assertEqual(response.data['count'], 52)
141+
142+
BlacklistedUser.objects.create(
143+
uid='444',
144+
username='the_user',
145+
added_by=self.user
146+
)
147+
response = self.client.get(self.url, {'blacklist': 'true'})
148+
self.assertEqual(response.status_code, 200)
149+
self.assertEqual(response.data['count'], 53)
150+
120151
def test_csv_renderer(self):
121152
self.assertIn(
122153
PaginatedCSVRenderer,

0 commit comments

Comments
 (0)