diff --git a/src/pages-and-resources/proctoring/Settings.jsx b/src/pages-and-resources/proctoring/Settings.jsx
index 26471bcfa..1363a2f3c 100644
--- a/src/pages-and-resources/proctoring/Settings.jsx
+++ b/src/pages-and-resources/proctoring/Settings.jsx
@@ -493,14 +493,17 @@ function ProctoringSettings({ intl, onClose }) {
// This option is not directly selectable.
const proctoringProvidersStudio = settingsResponse.data.available_proctoring_providers;
const proctoringProvidersLti = ltiProvidersResponse?.data || [];
- setAllowLtiProviders(proctoringProvidersStudio.includes('lti_external'));
+ const enableLtiProviders = proctoringProvidersStudio.includes('lti_external');
+ setAllowLtiProviders(enableLtiProviders);
setLtiProctoringProviders(proctoringProvidersLti);
// flatten provider objects and coalesce values to just the provider key
- setAvailableProctoringProviders(
- proctoringProvidersLti.reduce((result, provider) => [...result, provider.name], []).concat(
- proctoringProvidersStudio.filter(value => value !== 'lti_external'),
- ),
- );
+ let availableProviders = proctoringProvidersStudio.filter(value => value !== 'lti_external');
+ if (enableLtiProviders) {
+ availableProviders = proctoringProvidersLti.reduce(
+ (result, provider) => [...result, provider.name], availableProviders,
+ );
+ }
+ setAvailableProctoringProviders(availableProviders);
let selectedProvider;
if (proctoredExamSettings.proctoring_provider === 'lti_external') {
diff --git a/src/pages-and-resources/proctoring/Settings.test.jsx b/src/pages-and-resources/proctoring/Settings.test.jsx
index ba7f72d14..95889aaba 100644
--- a/src/pages-and-resources/proctoring/Settings.test.jsx
+++ b/src/pages-and-resources/proctoring/Settings.test.jsx
@@ -463,8 +463,10 @@ describe('ProctoredExamSettings', () => {
});
it('Does not include lti_external as a selectable option', async () => {
- const courseData = mockGetFutureCourseData;
- courseData.available_proctoring_providers = ['lti_external', 'proctortrack', 'mockproc'];
+ const courseData = {
+ ...mockGetFutureCourseData,
+ available_proctoring_providers: ['lti_external', 'proctortrack', 'mockproc'],
+ };
mockCourseData(courseData);
await act(async () => render(intlWrapper()));
await waitFor(() => {
@@ -474,8 +476,10 @@ describe('ProctoredExamSettings', () => {
});
it('Includes lti proctoring provider options when lti_external is allowed by studio', async () => {
- const courseData = mockGetFutureCourseData;
- courseData.available_proctoring_providers = ['lti_external', 'proctortrack', 'mockproc'];
+ const courseData = {
+ ...mockGetFutureCourseData,
+ available_proctoring_providers: ['lti_external', 'proctortrack', 'mockproc'],
+ };
mockCourseData(courseData);
await act(async () => render(intlWrapper()));
await waitFor(() => {
@@ -486,6 +490,19 @@ describe('ProctoredExamSettings', () => {
expect(providerOption.hasAttribute('disabled')).toEqual(false);
});
+ it('Does not include lti provider options when lti_external is not available in studio', async () => {
+ const isAdmin = true;
+ setupApp(isAdmin);
+ mockCourseData(mockGetFutureCourseData);
+ await act(async () => render(intlWrapper()));
+ await waitFor(() => {
+ screen.getByDisplayValue('mockproc');
+ });
+
+ const providerOption = screen.queryByTestId('test_lti');
+ expect(providerOption).not.toBeInTheDocument();
+ });
+
it('Does not request lti provider options if there is no exam service url configuration', async () => {
mergeConfig({
EXAMS_BASE_URL: null,
@@ -583,7 +600,7 @@ describe('ProctoredExamSettings', () => {
});
});
- describe.only('Save settings', () => {
+ describe('Save settings', () => {
beforeEach(async () => {
axiosMock.onPost(
StudioApiService.getProctoredExamSettingsUrl(defaultProps.courseId),
diff --git a/src/proctored-exam-settings/ProctoredExamSettings.jsx b/src/proctored-exam-settings/ProctoredExamSettings.jsx
index 3f8bab35d..1f372fc6a 100644
--- a/src/proctored-exam-settings/ProctoredExamSettings.jsx
+++ b/src/proctored-exam-settings/ProctoredExamSettings.jsx
@@ -519,14 +519,18 @@ function ProctoredExamSettings({ courseId, intl }) {
// This option is not directly selectable.
const proctoringProvidersStudio = settingsResponse.data.available_proctoring_providers;
const proctoringProvidersLti = ltiProvidersResponse?.data || [];
- setAllowLtiProviders(proctoringProvidersStudio.includes('lti_external'));
+ const enableLtiProviders = proctoringProvidersStudio.includes('lti_external');
+ setAllowLtiProviders(enableLtiProviders);
setLtiProctoringProviders(proctoringProvidersLti);
// flatten provider objects and coalesce values to just the provider key
- setAvailableProctoringProviders(
- proctoringProvidersLti.reduce((result, provider) => [...result, provider.name], []).concat(
- proctoringProvidersStudio.filter(value => value !== 'lti_external'),
- ),
- );
+ let availableProviders = proctoringProvidersStudio.filter(value => value !== 'lti_external');
+ if (enableLtiProviders) {
+ availableProviders = proctoringProvidersLti.reduce(
+ (result, provider) => [...result, provider.name], availableProviders,
+ );
+ }
+ setAvailableProctoringProviders(availableProviders);
+
if (proctoredExamSettings.proctoring_provider === 'lti_external') {
setProctoringProvider(examConfigResponse.data.provider);
} else {