diff --git a/greg/admin.py b/greg/admin.py index ad5e6a5682eea7be4bd9a4b94acaa4b20a52c742..829e807dd9f9cc7ea6a93275865299f2a1e2ff3f 100644 --- a/greg/admin.py +++ b/greg/admin.py @@ -82,7 +82,7 @@ class RoleAdmin(VersionAdmin): class RoleTypeAdmin(VersionAdmin): - list_display = ("id", "identifier", "name_nb", "name_en") + list_display = ("id", "identifier", "name_nb", "name_en", "visible") readonly_fields = ("id", "created", "updated") diff --git a/greg/migrations/0031_roletype_visible.py b/greg/migrations/0031_roletype_visible.py new file mode 100644 index 0000000000000000000000000000000000000000..8b465151b21bd3989ef34bdb5e36cec2da1f654a --- /dev/null +++ b/greg/migrations/0031_roletype_visible.py @@ -0,0 +1,17 @@ +# Generated by Django 4.1.4 on 2023-11-08 17:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("greg", "0030_remove_identity_identity_type_value_unique_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="roletype", + name="visible", + field=models.BooleanField(default=False), + ), + ] diff --git a/greg/models.py b/greg/models.py index 75ac0e72386812c86d1154be4af8c7db307a51e3..e80e3b1d322096c00c17b44b9e9882a275ee4642 100644 --- a/greg/models.py +++ b/greg/models.py @@ -185,6 +185,7 @@ class RoleType(BaseModel): default_duration_days = models.IntegerField(null=True) # Max days into the future this role can be assigned max_days = models.IntegerField(default=365) + visible = models.BooleanField(default=False) def __str__(self): return f"{str(self.name_en or self.name_nb)} ({self.identifier})" diff --git a/gregui/api/views/roletypes.py b/gregui/api/views/roletypes.py index 1e20cb26bdc970b9fbf180c7d8cf4a13f143d673..21bc05766ee4ed890afed868554d03fc550af3bb 100644 --- a/gregui/api/views/roletypes.py +++ b/gregui/api/views/roletypes.py @@ -1,5 +1,6 @@ from rest_framework import permissions from rest_framework.generics import ListAPIView +from rest_framework.response import Response from greg.models import RoleType from gregui.api.serializers.roletype import RoleTypeSerializerUi @@ -9,3 +10,8 @@ class RoleTypeViewSet(ListAPIView): queryset = RoleType.objects.all().order_by("id") permission_classes = [permissions.AllowAny] serializer_class = RoleTypeSerializerUi + + def get(self, request, *args, **kwargs): + roletypes = self.queryset.filter(visible=True) + serializer = self.serializer_class(roletypes, many=True) + return Response(serializer.data) diff --git a/gregui/tests/api/views/test_roletypes.py b/gregui/tests/api/views/test_roletypes.py new file mode 100644 index 0000000000000000000000000000000000000000..1219a5880324bbc3328c8060341cd0da1ed17053 --- /dev/null +++ b/gregui/tests/api/views/test_roletypes.py @@ -0,0 +1,28 @@ +import pytest + +from rest_framework.reverse import reverse +from rest_framework import status + +from greg.models import RoleType + + +@pytest.mark.django_db +def test_get_roletypes( + client, + role_type_1, + role_type_2, + role_type_3, + role_type_4, + role_type_5, +): + response = client.get(reverse("gregui-v1:role-types"), data={}) + response_body = response.json() + assert response.status_code == status.HTTP_200_OK + assert len(response_body) == 5 + + RoleType.objects.filter(id=role_type_1.id).update(visible=False) + RoleType.objects.filter(id=role_type_3.id).update(visible=False) + response = client.get(reverse("gregui-v1:role-types"), data={}) + response_body = response.json() + assert response.status_code == status.HTTP_200_OK + assert len(response_body) == 3 diff --git a/gregui/tests/conftest.py b/gregui/tests/conftest.py index 271078920a189163547f3a16188f22ea81093a71..2014ae539a22f70139314d8efd39db518f9d31eb 100644 --- a/gregui/tests/conftest.py +++ b/gregui/tests/conftest.py @@ -99,7 +99,65 @@ def unit_foo3() -> OrganizationalUnit: @pytest.fixture def role_type_foo() -> RoleType: rt = RoleType.objects.create( - identifier="role_foo", name_en="Role Foo EN", name_nb="Role Foo NB" + identifier="role_foo", + name_en="Role Foo EN", + name_nb="Role Foo NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_1() -> RoleType: + rt = RoleType.objects.create( + identifier="role1", + name_en="Role1 EN", + name_nb="Role1 NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_2() -> RoleType: + rt = RoleType.objects.create( + identifier="role2", + name_en="Role2 EN", + name_nb="Role2 NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_3() -> RoleType: + rt = RoleType.objects.create( + identifier="role3", + name_en="Role3 EN", + name_nb="Role3 NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_4() -> RoleType: + rt = RoleType.objects.create( + identifier="role4", + name_en="Role4 EN", + name_nb="Role4 NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_5() -> RoleType: + rt = RoleType.objects.create( + identifier="role5", + name_en="Role5 EN", + name_nb="Role5 NB", + visible=True, ) return RoleType.objects.get(id=rt.id)