diff --git a/src/grading-settings/GradingSettings.jsx b/src/grading-settings/GradingSettings.jsx index bcb3a8f08..5ac8a345c 100644 --- a/src/grading-settings/GradingSettings.jsx +++ b/src/grading-settings/GradingSettings.jsx @@ -42,7 +42,7 @@ const GradingSettings = ({ courseId }) => { } = useCourseSettings(courseId); const { mutate: updateGradingSettings, - isLoading: savePending, + isPending: savePending, isSuccess: savingStatus, isError: savingFailed, } = useGradingSettingUpdater(courseId); diff --git a/src/grading-settings/GradingSettings.test.jsx b/src/grading-settings/GradingSettings.test.jsx index 02e0dfb8b..ecb5efcba 100644 --- a/src/grading-settings/GradingSettings.test.jsx +++ b/src/grading-settings/GradingSettings.test.jsx @@ -39,6 +39,9 @@ describe('', () => { }, }); + // jsdom doesn't implement scrollTo; mock to avoid noisy console errors. + Object.defineProperty(window, 'scrollTo', { value: jest.fn(), writable: true }); + store = initializeStore(); axiosMock = new MockAdapter(getAuthenticatedHttpClient()); axiosMock @@ -99,6 +102,26 @@ describe('', () => { testSaving(); }); + it('should show success alert and hide save prompt after successful save', async () => { + // Trigger change to show save prompt + const segmentInputs = await screen.findAllByTestId('grading-scale-segment-input'); + const segmentInput = segmentInputs[2]; + fireEvent.change(segmentInput, { target: { value: 'PatchTest' } }); + // Click save and verify pending state appears + const saveBtnInitial = screen.getByText(messages.buttonSaveText.defaultMessage); + fireEvent.click(saveBtnInitial); + expect(screen.getByText(messages.buttonSavingText.defaultMessage)).toBeInTheDocument(); + // Wait for success alert to appear (mutation success) + const successAlert = await screen.findByText(messages.alertSuccess.defaultMessage); + expect(successAlert).toBeVisible(); + // Pending label should disappear and save prompt should be hidden (button removed) + expect(screen.queryByText(messages.buttonSavingText.defaultMessage)).toBeNull(); + const saveAlert = screen.queryByTestId('grading-settings-save-alert'); + expect(saveAlert).toBeNull(); + // Ensure original save button text is no longer present because the prompt closed + expect(screen.queryByText(messages.buttonSaveText.defaultMessage)).toBeNull(); + }); + it('should handle being offline gracefully', async () => { setOnlineStatus(false); const segmentInputs = await screen.findAllByTestId('grading-scale-segment-input');