diff --git a/plugins/course-apps/proctoring/Settings.jsx b/plugins/course-apps/proctoring/Settings.jsx index 645bc95dd0..9a4a1329dc 100644 --- a/plugins/course-apps/proctoring/Settings.jsx +++ b/plugins/course-apps/proctoring/Settings.jsx @@ -32,7 +32,6 @@ const ProctoringSettings = ({ onClose }) => { proctoringProvider: false, escalationEmail: '', allowOptingOut: false, - createZendeskTickets: false, }; const [formValues, setFormValues] = useState(initialFormValues); const [loading, setLoading] = useState(true); @@ -78,17 +77,16 @@ const ProctoringSettings = ({ onClose }) => { const value = target.type === 'checkbox' ? target.checked : target.value; const { name } = target; - if (['allowOptingOut', 'createZendeskTickets'].includes(name)) { + if (['allowOptingOut'].includes(name)) { // Form.Radio expects string values, so convert back to a boolean here setFormValues({ ...formValues, [name]: value === 'true' }); } else if (name === 'proctoringProvider') { const newFormValues = { ...formValues, proctoringProvider: value }; - if (value === 'proctortrack') { - setFormValues({ ...newFormValues, createZendeskTickets: false }); + setFormValues(newFormValues); setShowEscalationEmail(true); } else if (value === 'software_secure') { - setFormValues({ ...newFormValues, createZendeskTickets: true }); + setFormValues({ ...newFormValues }); setShowEscalationEmail(false); } else if (isLtiProvider(value)) { setFormValues(newFormValues); @@ -116,7 +114,6 @@ const ProctoringSettings = ({ onClose }) => { enable_proctored_exams: formValues.enableProctoredExams, // lti providers are managed outside edx-platform, lti_external indicates this proctoring_provider: isLtiProviderSelected ? 'lti_external' : selectedProvider, - create_zendesk_tickets: formValues.createZendeskTickets, }, }; if (isEdxStaff) { @@ -387,29 +384,6 @@ const ProctoringSettings = ({ onClose }) => { )} - - {/* CREATE ZENDESK TICKETS */} - { isEdxStaff && formValues.enableProctoredExams && !isLtiProviderSelected && ( -
- - - {intl.formatMessage(messages['authoring.proctoring.createzendesk.label'])} - - - - {intl.formatMessage(messages['authoring.proctoring.yes'])} - - - {intl.formatMessage(messages['authoring.proctoring.no'])} - - - -
- )} ); } @@ -570,7 +544,6 @@ const ProctoringSettings = ({ onClose }) => { proctoringProvider: selectedProvider, enableProctoredExams: proctoredExamSettings.enable_proctored_exams, allowOptingOut: proctoredExamSettings.allow_proctoring_opt_out, - createZendeskTickets: proctoredExamSettings.create_zendesk_tickets, // The backend API may return null for the proctoringEscalationEmail value, which is the default. // In order to keep our email input component controlled, we use the empty string as the default // and perform this conversion during GETs and POSTs. diff --git a/plugins/course-apps/proctoring/Settings.test.jsx b/plugins/course-apps/proctoring/Settings.test.jsx index 6cdd33aa16..30a2f25057 100644 --- a/plugins/course-apps/proctoring/Settings.test.jsx +++ b/plugins/course-apps/proctoring/Settings.test.jsx @@ -105,36 +105,6 @@ describe('ProctoredExamSettings', () => { await act(async () => render(intlWrapper())); }); - it('Updates Zendesk ticket field if proctortrack is provider', async () => { - await waitFor(() => { - screen.getByDisplayValue('mockproc'); - }); - const selectElement = screen.getByDisplayValue('mockproc'); - fireEvent.change(selectElement, { target: { value: 'proctortrack' } }); - const zendeskTicketInput = screen.getByTestId('createZendeskTicketsNo'); - expect(zendeskTicketInput.checked).toEqual(true); - }); - - it('Updates Zendesk ticket field if software_secure is provider', async () => { - await waitFor(() => { - screen.getByDisplayValue('mockproc'); - }); - const selectElement = screen.getByDisplayValue('mockproc'); - fireEvent.change(selectElement, { target: { value: 'software_secure' } }); - const zendeskTicketInput = screen.getByTestId('createZendeskTicketsYes'); - expect(zendeskTicketInput.checked).toEqual(true); - }); - - it('Does not update zendesk ticket field for any other provider', async () => { - await waitFor(() => { - screen.getByDisplayValue('mockproc'); - }); - const selectElement = screen.getByDisplayValue('mockproc'); - fireEvent.change(selectElement, { target: { value: 'mockproc' } }); - const zendeskTicketInput = screen.getByTestId('createZendeskTicketsYes'); - expect(zendeskTicketInput.checked).toEqual(true); - }); - it('Hides all other fields when enabledProctorExam is false when first loaded', async () => { cleanup(); // Overrides the handler defined in beforeEach. @@ -161,8 +131,6 @@ describe('ProctoredExamSettings', () => { expect(screen.queryByText('Allow Opting Out of Proctored Exams')).toBeNull(); expect(screen.queryByDisplayValue('mockproc')).toBeNull(); expect(screen.queryByTestId('escalationEmail')).toBeNull(); - expect(screen.queryByTestId('createZendeskTicketsYes')).toBeNull(); - expect(screen.queryByTestId('createZendeskTicketsNo')).toBeNull(); }); it('Hides all other fields when enableProctoredExams toggled to false', async () => { @@ -172,8 +140,6 @@ describe('ProctoredExamSettings', () => { expect(screen.queryByText('Allow opting out of proctored exams')).toBeDefined(); expect(screen.queryByDisplayValue('mockproc')).toBeDefined(); expect(screen.queryByTestId('escalationEmail')).toBeDefined(); - expect(screen.queryByTestId('createZendeskTicketsYes')).toBeDefined(); - expect(screen.queryByTestId('createZendeskTicketsNo')).toBeDefined(); let enabledProctoredExamCheck = screen.getAllByLabelText('Proctored exams', { exact: false })[0]; expect(enabledProctoredExamCheck.checked).toEqual(true); @@ -183,8 +149,6 @@ describe('ProctoredExamSettings', () => { expect(screen.queryByText('Allow opting out of proctored exams')).toBeNull(); expect(screen.queryByDisplayValue('mockproc')).toBeNull(); expect(screen.queryByTestId('escalationEmail')).toBeNull(); - expect(screen.queryByTestId('createZendeskTicketsYes')).toBeNull(); - expect(screen.queryByTestId('createZendeskTicketsNo')).toBeNull(); }); it('Hides unsupported fields when lti provider is selected', async () => { @@ -527,18 +491,16 @@ describe('ProctoredExamSettings', () => { }); describe('Toggles field visibility based on user permissions', () => { - it('Hides opting out and zendesk tickets for non edX staff', async () => { + it('Hides opting out for non edX staff', async () => { setupApp(false); await act(async () => render(intlWrapper())); expect(screen.queryByTestId('allowOptingOutYes')).toBeNull(); - expect(screen.queryByTestId('createZendeskTicketsYes')).toBeNull(); }); - it('Shows opting out and zendesk tickets for edX staff', async () => { + it('Shows opting out for edX staff', async () => { setupApp(true); await act(async () => render(intlWrapper())); expect(screen.queryByTestId('allowOptingOutYes')).not.toBeNull(); - expect(screen.queryByTestId('createZendeskTicketsYes')).not.toBeNull(); }); }); @@ -624,7 +586,6 @@ describe('ProctoredExamSettings', () => { allow_proctoring_opt_out: false, proctoring_provider: 'proctortrack', proctoring_escalation_email: 'proctortrack@example.com', - create_zendesk_tickets: false, }, }); @@ -651,7 +612,6 @@ describe('ProctoredExamSettings', () => { enable_proctored_exams: true, allow_proctoring_opt_out: false, proctoring_provider: 'mockproc', - create_zendesk_tickets: true, }, }); @@ -692,7 +652,6 @@ describe('ProctoredExamSettings', () => { enable_proctored_exams: true, allow_proctoring_opt_out: false, proctoring_provider: 'lti_external', - create_zendesk_tickets: true, }, }); @@ -722,7 +681,6 @@ describe('ProctoredExamSettings', () => { enable_proctored_exams: true, allow_proctoring_opt_out: false, proctoring_provider: 'mockproc', - create_zendesk_tickets: true, }, }); @@ -744,7 +702,6 @@ describe('ProctoredExamSettings', () => { allow_proctoring_opt_out: false, proctoring_provider: 'mockproc', proctoring_escalation_email: 'test@example.com', - create_zendesk_tickets: true, }, available_proctoring_providers: ['software_secure', 'proctortrack', 'mockproc'], course_start_date: '2070-01-01T00:00:00Z', @@ -762,7 +719,6 @@ describe('ProctoredExamSettings', () => { enable_proctored_exams: true, allow_proctoring_opt_out: false, proctoring_provider: 'mockproc', - create_zendesk_tickets: true, }, }); @@ -862,27 +818,5 @@ describe('ProctoredExamSettings', () => { expect(document.activeElement).toEqual(successAlert); }); }); - - it('Include Zendesk ticket in post request if user is not an admin', async () => { - // use non-admin user for test - const isAdmin = false; - setupApp(isAdmin); - - await act(async () => render(intlWrapper())); - // Make a change to the proctoring provider - const selectElement = screen.getByDisplayValue('mockproc'); - fireEvent.change(selectElement, { target: { value: 'proctortrack' } }); - const submitButton = screen.getByTestId('submissionButton'); - fireEvent.click(submitButton); - expect(axiosMock.history.post.length).toBe(1); - expect(JSON.parse(axiosMock.history.post[0].data)).toEqual({ - proctored_exam_settings: { - enable_proctored_exams: true, - proctoring_provider: 'proctortrack', - proctoring_escalation_email: 'test@example.com', - create_zendesk_tickets: false, - }, - }); - }); }); }); diff --git a/plugins/course-apps/proctoring/messages.js b/plugins/course-apps/proctoring/messages.js index b5192c1fea..ed4d652fb3 100644 --- a/plugins/course-apps/proctoring/messages.js +++ b/plugins/course-apps/proctoring/messages.js @@ -81,11 +81,6 @@ const messages = defineMessages({ defaultMessage: 'Allow learners to opt out of proctoring on proctored exams', description: 'Label for radio selection allowing proctored exam opt out', }, - 'authoring.proctoring.createzendesk.label': { - id: 'authoring.proctoring.createzendesk.label', - defaultMessage: 'Create Zendesk tickets for suspicious attempts', - description: 'Label for Zendesk ticket creation radio select.', - }, 'authoring.proctoring.error.single': { id: 'authoring.proctoring.error.single', defaultMessage: 'There is 1 error in this form.',