From bb8aceea240f74e4577568aba687de15a85838fe Mon Sep 17 00:00:00 2001 From: Tore Brede <Tore.Brede@uib.no> Date: Wed, 16 Feb 2022 09:33:40 +0100 Subject: [PATCH] GREG-214: Switching to showing orgreg ID in dropdown for units --- frontend/src/hooks/useOus/index.tsx | 1 + .../sponsor/register/stepPersonForm.tsx | 2 +- greg/api/serializers/organizational_unit.py | 2 +- greg/models.py | 10 ++++++ gregui/tests/api/views/test_ous.py | 35 +++++++++++++++++++ 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 gregui/tests/api/views/test_ous.py diff --git a/frontend/src/hooks/useOus/index.tsx b/frontend/src/hooks/useOus/index.tsx index 2defbb73..c2f1205b 100644 --- a/frontend/src/hooks/useOus/index.tsx +++ b/frontend/src/hooks/useOus/index.tsx @@ -5,6 +5,7 @@ type OuData = { id: number nb: string en: string + orgreg_id?: string } function useOus(): OuData[] | undefined { diff --git a/frontend/src/routes/sponsor/register/stepPersonForm.tsx b/frontend/src/routes/sponsor/register/stepPersonForm.tsx index 5ac3a41a..eadf6d0f 100644 --- a/frontend/src/routes/sponsor/register/stepPersonForm.tsx +++ b/frontend/src/routes/sponsor/register/stepPersonForm.tsx @@ -243,7 +243,7 @@ const StepPersonForm = forwardRef( .sort(i18n.language === 'en' ? enSort : nbSort) .map((ou) => ( <MenuItem key={ou.id.toString()} value={ou.id}> - {getOuName(ou)} ({ou.id}) + {getOuName(ou)} ({ou.orgreg_id ?? ''}) </MenuItem> ))} </TextField> diff --git a/greg/api/serializers/organizational_unit.py b/greg/api/serializers/organizational_unit.py index 1053f79b..15130f4f 100644 --- a/greg/api/serializers/organizational_unit.py +++ b/greg/api/serializers/organizational_unit.py @@ -29,4 +29,4 @@ class SponsorOrgUnitsSerializer(ModelSerializer): class Meta: model = OrganizationalUnit - fields = ["id", "nb", "en"] + fields = ["id", "nb", "en", "orgreg_id"] diff --git a/greg/models.py b/greg/models.py index fe55c06e..c75a5dd2 100644 --- a/greg/models.py +++ b/greg/models.py @@ -10,6 +10,7 @@ from django.db.models import Q from django.utils import timezone from greg.managers import PersonManager +from gregsite.settings.base import ORGREG_NAME class BaseModel(DirtyFieldsMixin, models.Model): @@ -472,6 +473,15 @@ class OrganizationalUnit(BaseModel): active = models.BooleanField(default=True) deleted = models.BooleanField(default=False) + @property + def orgreg_id(self) -> Optional[str]: + """The orgreg ID if it exists""" + return ( + self.identifiers.filter(name=ORGREG_NAME) + .values_list("value", flat=True) + .first() + ) + def __repr__(self) -> str: return "{}(id={!r}, name_en={!r}, parent={!r})".format( self.__class__.__name__, self.pk, self.name_en, self.parent diff --git a/gregui/tests/api/views/test_ous.py b/gregui/tests/api/views/test_ous.py new file mode 100644 index 00000000..de64c656 --- /dev/null +++ b/gregui/tests/api/views/test_ous.py @@ -0,0 +1,35 @@ +import pytest +from rest_framework.reverse import reverse + +from greg.models import OuIdentifier +from gregsite.settings.base import ORGREG_NAME + + +@pytest.mark.django_db +def test_orgreg_field_populated_if_identifier_present( + unit_foo, client, log_in, user_sponsor, sponsor_foo +): + orgreg_id = "200" + OuIdentifier.objects.create( + source="orgreg", name=ORGREG_NAME, value=orgreg_id, orgunit=unit_foo + ) + log_in(user_sponsor) + + resp = client.get(reverse("gregui-v1:ou-list")) + data = resp.json() + + assert len(data) == 1 + assert data[0]["orgreg_id"] == orgreg_id + + +@pytest.mark.django_db +def test_orgreg_field_empty_if_identifier_not_present( + unit_foo, client, log_in, user_sponsor, sponsor_foo +): + log_in(user_sponsor) + + resp = client.get(reverse("gregui-v1:ou-list")) + data = resp.json() + + assert len(data) == 1 + assert data[0]["orgreg_id"] is None -- GitLab