Skip to content

Commit fbe3ba3

Browse files
authored
Merge pull request #82 from 6aika/jurisdiction-filter
Add jurisdiction_id filtering to service list
2 parents f934a99 + 83d7f82 commit fbe3ba3

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

issues/api/views/services.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
11
from __future__ import absolute_import
22

33
from django.utils import translation
4+
from rest_framework.filters import BaseFilterBackend
45
from rest_framework.generics import ListAPIView
56

67
from issues.api.serializers import ServiceSerializer
78
from issues.models import Service
89

910

11+
class ServiceFilter(BaseFilterBackend):
12+
def filter_queryset(self, request, queryset, view):
13+
jurisdiction_id = request.query_params.get('jurisdiction_id')
14+
if jurisdiction_id:
15+
queryset = queryset.filter(jurisdictions__identifier=jurisdiction_id)
16+
return queryset
17+
18+
1019
class ServiceList(ListAPIView):
1120
item_tag_name = 'service'
1221
root_tag_name = 'services'
1322
serializer_class = ServiceSerializer
1423
queryset = Service.objects.all()
24+
filter_backends = (
25+
ServiceFilter,
26+
)
1527

1628
def dispatch(self, request, *args, **kwargs):
1729
locale = (request.GET.get("locale") or translation.get_language())

issues/tests/test_service_list.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import pytest
12
from django.core.urlresolvers import reverse_lazy
3+
from django.utils.crypto import get_random_string
24

5+
from issues.models import Jurisdiction
36
from issues.models.services import Service
47
from issues.tests.utils import get_data_from_response
58

@@ -23,3 +26,23 @@ def test_service_list_i18n(mf_api_client, random_service):
2326
)
2427
assert len(data) == 1
2528
assert data[0]['service_name'].endswith(lang) # As we set above
29+
30+
31+
@pytest.mark.django_db
32+
def test_service_list_jurisdiction_filter(mf_api_client):
33+
tku = Jurisdiction.objects.create(identifier='fi.turku')
34+
hel = Jurisdiction.objects.create(identifier='fi.hel')
35+
tku_service = Service.objects.create(service_code=get_random_string(), service_name='Aurajokipalvelu')
36+
hel_service = Service.objects.create(service_code=get_random_string(), service_name='Suomenlinnapalvelu')
37+
tku_service.jurisdictions.add(tku)
38+
hel_service.jurisdictions.add(hel)
39+
for query, expected in (
40+
({}, [tku_service, hel_service]),
41+
({'jurisdiction_id': tku.identifier}, [tku_service]),
42+
({'jurisdiction_id': hel.identifier}, [hel_service]),
43+
):
44+
data = get_data_from_response(
45+
mf_api_client.get(SERVICE_LIST_ENDPOINT, query)
46+
)
47+
assert len(data) == len(expected)
48+
assert set(s['service_name'] for s in data) == set(s.service_name for s in expected)

0 commit comments

Comments
 (0)