Skip to content

Commit

Permalink
✨ [#5016] Add Referentielijsten service select to builder
Browse files Browse the repository at this point in the history
and modify the services API endpoint to retrieve referentielijsten services based on a query parameter
  • Loading branch information
stevenbal committed Feb 3, 2025
1 parent 3f79ba2 commit 22e4792
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 2 deletions.
14 changes: 14 additions & 0 deletions src/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4167,6 +4167,12 @@ paths:
Note that this endpoint is **EXPERIMENTAL**.
summary: List available services
parameters:
- in: query
name: type
schema:
type: string
description: 'The type of Services to return, possible values: `referentielijsten`'
tags:
- services
security:
Expand Down Expand Up @@ -9723,6 +9729,13 @@ components:
type: string
format: uri
readOnly: true
slug:
type: string
title: Service slug
description: A unique, human-friendly slug to identify this service. Primarily
useful for cross-instance import/export.
maxLength: 255
pattern: ^[-a-zA-Z0-9_]+$
label:
type: string
maxLength: 100
Expand All @@ -9740,6 +9753,7 @@ components:
- apiRoot
- apiType
- label
- slug
- url
x-experimental: true
ServiceFetchConfiguration:
Expand Down
2 changes: 2 additions & 0 deletions src/openforms/js/components/formio_builder/WebformBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
getRegistrationAttributes,
getValidatorPlugins,
} from './plugins';
import {getServices} from './referentielijsten';

let _supportedLanguages = undefined;
const getSupportedLanguages = () => {
Expand Down Expand Up @@ -167,6 +168,7 @@ class WebformBuilder extends WebformBuilderFormio {
getFormComponents={() => this.webform.form.components}
getValidatorPlugins={getValidatorPlugins}
getRegistrationAttributes={getRegistrationAttributes}
getServices={getServices}
getPrefillPlugins={getPrefillPlugins}
getPrefillAttributes={getPrefillAttributes}
getFileTypes={async () => FILE_TYPES}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import {get} from 'utils/fetch';

export const getServices = async type => {
const resp = await get(`/api/v2/services?type=${encodeURIComponent(type)}`);
return resp.data;
};
1 change: 1 addition & 0 deletions src/openforms/services/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Meta:
model = Service
fields = (
"url",
"slug",
"label",
"api_root",
"api_type",
Expand Down
23 changes: 21 additions & 2 deletions src/openforms/services/api/viewsets.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
from django.utils.translation import gettext_lazy as _

from drf_spectacular.utils import extend_schema, extend_schema_view
from drf_spectacular.utils import OpenApiParameter, extend_schema, extend_schema_view
from rest_framework import authentication, permissions, viewsets
from zgw_consumers.models import Service

from openforms.api.utils import mark_experimental
from openforms.config.models import GlobalConfiguration

from . import serializers

Expand All @@ -17,7 +18,18 @@
"in the backend.\n\n"
"Note that this endpoint is **EXPERIMENTAL**."
),
)
parameters=[
OpenApiParameter(
name="type",
type=str,
location=OpenApiParameter.QUERY,
description=_(
"The type of Services to return, possible values: `referentielijsten`"
),
required=False,
)
],
),
)
@mark_experimental
class ServiceViewSet(viewsets.ReadOnlyModelViewSet):
Expand All @@ -30,3 +42,10 @@ class ServiceViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = serializers.ServiceSerializer

queryset = Service.objects.all()

def get_queryset(self):
qs = super().get_queryset()
if self.request.query_params.get("type") == "referentielijsten":
config = GlobalConfiguration.get_solo()
return config.referentielijsten_services
return qs
19 changes: 19 additions & 0 deletions src/openforms/services/tests/test_api_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from zgw_consumers.test.factories import ServiceFactory

from openforms.accounts.tests.factories import StaffUserFactory, UserFactory
from openforms.config.models import GlobalConfiguration


class AccessControlTests(APITestCase):
Expand Down Expand Up @@ -31,6 +32,24 @@ def test_service_list_returns_a_list_to_admin_users(self):
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.json(), [])

def test_service_list_filter_by_referentielijsten(self):
config = GlobalConfiguration.get_solo()
config.referentielijsten_services.set(
[ServiceFactory.create(label="Referentielijsten", slug="referentielijsten")]
)
config.save()
endpoint = reverse("api:service-list")
self.client.force_authenticate(user=self.admin_user)

response = self.client.get(endpoint, {"type": "referentielijsten"})

self.assertEqual(response.status_code, status.HTTP_200_OK)

services = response.json()

self.assertEqual(len(services), 1)
self.assertEqual(services[0]["slug"], "referentielijsten")

def test_returned_services_have_the_right_properties(self):
expected_service = ServiceFactory.create()
endpoint = reverse("api:service-list")
Expand Down

0 comments on commit 22e4792

Please sign in to comment.