From 8bbdbc9dee2094d194715b6fd127bc0c583a8434 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Fri, 15 Nov 2024 07:17:59 -0500 Subject: [PATCH] fix: ensure correct `admin_users` in EnterpriseCustomerUserViewSet response (#2287) --- CHANGELOG.rst | 4 ++++ enterprise/__init__.py | 2 +- enterprise/api/v1/serializers.py | 11 ++++++++- tests/test_enterprise/api/test_views.py | 31 +++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9f23413a0..ca7d954bf 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -17,6 +17,10 @@ Unreleased ---------- * nothing unreleased +[4.32.2] +-------- +* fix: ensure admin_users in EnterpriseCustomerUserViewSet is correct. + [4.32.1] -------- * feat: enable search filter on learner data transmission audit admin views for all integrated channels. diff --git a/enterprise/__init__.py b/enterprise/__init__.py index aceba5514..7073c032b 100644 --- a/enterprise/__init__.py +++ b/enterprise/__init__.py @@ -2,4 +2,4 @@ Your project description goes here. """ -__version__ = "4.32.1" +__version__ = "4.32.2" diff --git a/enterprise/api/v1/serializers.py b/enterprise/api/v1/serializers.py index 219fbf978..11791e076 100644 --- a/enterprise/api/v1/serializers.py +++ b/enterprise/api/v1/serializers.py @@ -721,7 +721,7 @@ class Meta: ) user = UserSerializer() - enterprise_customer = EnterpriseCustomerSerializer() + enterprise_customer = serializers.SerializerMethodField() data_sharing_consent_records = serializers.SerializerMethodField() groups = serializers.SerializerMethodField() role_assignments = serializers.SerializerMethodField() @@ -756,6 +756,15 @@ def __init__(self, instance=None, data=empty, **kwargs): ) self.role_assignments_by_ecu_id = role_assignments_by_ecu_id + def get_enterprise_customer(self, obj): + """ + Return serialization of EnterpriseCustomer associated with the EnterpriseCustomerUser. + """ + return EnterpriseCustomerSerializer( + instance=obj.enterprise_customer, + context=self.context + ).data + def get_data_sharing_consent_records(self, obj): """ Return serialization of EnterpriseCustomerUser.data_sharing_consent_records property. diff --git a/tests/test_enterprise/api/test_views.py b/tests/test_enterprise/api/test_views.py index 10074e34f..9391f4cff 100644 --- a/tests/test_enterprise/api/test_views.py +++ b/tests/test_enterprise/api/test_views.py @@ -555,6 +555,37 @@ def test_get_enterprise_customer_user_contains_features(self): response = self.load_json(response.content) assert response['enterprise_features'] is not None + def test_get_enterprise_customer_user_contains_admin_users(self): + """ + Assert whether the paginated response contains `enterprise_customer.admin_users`. + """ + user = factories.UserFactory() + enterprise_customer = factories.EnterpriseCustomerFactory(uuid=FAKE_UUIDS[0]) + factories.EnterpriseCustomerUserFactory( + user_id=user.id, + enterprise_customer=enterprise_customer + ) + admin_user = factories.UserFactory() + SystemWideEnterpriseUserRoleAssignment.objects.create( + role=admin_role(), + user=admin_user, + enterprise_customer=enterprise_customer + ) + response = self.client.get( + '{host}{path}?username={username}'.format( + host=settings.TEST_SERVER, + path=ENTERPRISE_LEARNER_LIST_ENDPOINT, + username=user.username + ) + ) + response = self.load_json(response.content) + assert response['results'][0]['enterprise_customer']['admin_users'] == [ + { + 'email': admin_user.email, + 'lms_user_id': admin_user.id, + } + ] + def test_get_enterprise_customer_user_contains_consent_records(self): user = factories.UserFactory() enterprise_customer = factories.EnterpriseCustomerFactory(uuid=FAKE_UUIDS[0])