diff --git a/lms/djangoapps/support/tests/test_views.py b/lms/djangoapps/support/tests/test_views.py index 96746d8ee8..090b8127ae 100644 --- a/lms/djangoapps/support/tests/test_views.py +++ b/lms/djangoapps/support/tests/test_views.py @@ -1369,3 +1369,33 @@ class LinkProgramEnrollmentSupportAPIViewTests(SupportViewTestCase): response_data = json.loads(response.content.decode('utf-8')) error = "All linking lines must be in the format 'external_user_key,lms_username'" assert response_data['errors'] == [error] + + +class SAMLProvidersWithOrgTests(SupportViewTestCase): + """ + Tests for the get_saml_providers API View + """ + _url = reverse("support:get_saml_providers") + + def setUp(self): + """ + Make the user support staff. + """ + super().setUp() + SupportStaffRole().add_users(self.user) + + self.org_key_list = ['test_org', 'donut_org', 'tri_org'] + for org_key in self.org_key_list: + lms_org = OrganizationFactory( + short_name=org_key + ) + SAMLProviderConfigFactory( + organization=lms_org, + slug=org_key, + enabled=True, + ) + + def test_returning_saml_providers(self): + response = self.client.get(self._url) + response_data = json.loads(response.content.decode('utf-8')) + assert response_data == self.org_key_list diff --git a/lms/djangoapps/support/urls.py b/lms/djangoapps/support/urls.py index d15611c452..e2d2e030c5 100644 --- a/lms/djangoapps/support/urls.py +++ b/lms/djangoapps/support/urls.py @@ -15,7 +15,8 @@ from .views.manage_user import ManageUserDetailView, ManageUserSupportView from .views.program_enrollments import ( LinkProgramEnrollmentSupportView, LinkProgramEnrollmentSupportAPIView, - ProgramEnrollmentsInspectorView + ProgramEnrollmentsInspectorView, + SAMLProvidersWithOrg, ) from .views.sso_records import SsoView @@ -64,5 +65,10 @@ urlpatterns = [ ProgramEnrollmentsInspectorView.as_view(), name='program_enrollments_inspector' ), + re_path( + r'get_saml_providers/?$', + SAMLProvidersWithOrg.as_view(), + name='get_saml_providers' + ), re_path(r'sso_records/(?P[\w.@+-]+)?$', SsoView.as_view(), name='sso_records'), ] diff --git a/lms/djangoapps/support/views/program_enrollments.py b/lms/djangoapps/support/views/program_enrollments.py index e0c38199b1..789daae381 100644 --- a/lms/djangoapps/support/views/program_enrollments.py +++ b/lms/djangoapps/support/views/program_enrollments.py @@ -262,3 +262,38 @@ class ProgramEnrollmentsInspectorView(View): ).prefetch_related('program_course_enrollments') serialized = ProgramEnrollmentSerializer(program_enrollments, many=True) return serialized.data + + +class SAMLProvidersWithOrg(APIView): + """ + Support-only API View for fetching a list of all + organizations names which will be utilized as keys. + """ + @method_decorator(require_support_permission) + def get(self, request): + """ + The get request returns a list of all + organizations names which will be utilized as keys. + * Example Request: + - GET /support/get_saml_providers/ + * Example Response: + [ + 'test_org', + 'donut_org', + 'tri_org' + ] + """ + org_key_names = self._get_org_key_names() + return Response(data=org_key_names) + + def _get_org_key_names(self): + """ + From our Third_party_auth models, return a list of + of organizations names which will be utilized as keys. + """ + saml_providers = SAMLProviderConfig.objects.current_set().filter( + enabled=True, + organization__isnull=False + ).select_related('organization') + + return [saml_provider.organization.short_name for saml_provider in saml_providers]