diff --git a/plugins/course-apps/live/Settings.jsx b/plugins/course-apps/live/Settings.jsx
index 1e1017086..4a79f5f58 100644
--- a/plugins/course-apps/live/Settings.jsx
+++ b/plugins/course-apps/live/Settings.jsx
@@ -72,6 +72,7 @@ const LiveSettings = ({
};
const handleSettingsSave = async (values) => {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
await dispatch(saveLiveConfiguration(courseId, values, navigate));
};
diff --git a/plugins/course-apps/ora_settings/Settings.jsx b/plugins/course-apps/ora_settings/Settings.jsx
index f16d10f48..386f3d742 100644
--- a/plugins/course-apps/ora_settings/Settings.jsx
+++ b/plugins/course-apps/ora_settings/Settings.jsx
@@ -48,8 +48,9 @@ const ORASettings = ({ onClose }) => {
event.preventDefault();
success = success && await handleSettingsSave(formValues);
- await setSaveError(!success);
+ setSaveError(!success);
if ((initialFormValues.enableFlexiblePeerGrade !== formValues.enableFlexiblePeerGrade) && success) {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
success = await dispatch(updateModel({
modelType: 'courseApps',
model: {
diff --git a/plugins/course-apps/ora_settings/Settings.test.jsx b/plugins/course-apps/ora_settings/Settings.test.jsx
index 0dd79a13f..787042f52 100644
--- a/plugins/course-apps/ora_settings/Settings.test.jsx
+++ b/plugins/course-apps/ora_settings/Settings.test.jsx
@@ -128,7 +128,7 @@ describe('ORASettings', () => {
await mockStore({ apiStatus: 200, enabled: true });
renderComponent();
- const checkbox = await screen.getByRole('checkbox', { name: /Flex Peer Grading/ });
+ const checkbox = screen.getByRole('checkbox', { name: /Flex Peer Grading/ });
expect(checkbox).toBeChecked();
await waitFor(() => {
diff --git a/plugins/course-apps/xpert_unit_summary/settings-modal/SettingsModal.jsx b/plugins/course-apps/xpert_unit_summary/settings-modal/SettingsModal.jsx
index 6aa5bdfbc..f4c016b04 100644
--- a/plugins/course-apps/xpert_unit_summary/settings-modal/SettingsModal.jsx
+++ b/plugins/course-apps/xpert_unit_summary/settings-modal/SettingsModal.jsx
@@ -239,8 +239,10 @@ const SettingsModal = ({
const values = { ...rest, enabled: enabled ? checked === 'true' : undefined };
if (enabled) {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
success = await dispatch(updateXpertSettings(courseId, values));
} else {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
success = await dispatch(removeXpertSettings(courseId));
}
diff --git a/src/certificates/certificates-list/hooks/useCertificatesList.jsx b/src/certificates/certificates-list/hooks/useCertificatesList.jsx
index 952fa8534..60faf4f13 100644
--- a/src/certificates/certificates-list/hooks/useCertificatesList.jsx
+++ b/src/certificates/certificates-list/hooks/useCertificatesList.jsx
@@ -25,6 +25,7 @@ const useCertificatesList = (courseId) => {
}));
const handleSubmit = async (values) => {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
await dispatch(updateCourseCertificate(courseId, values));
setEditModes({});
dispatch(setMode(MODE_STATES.view));
diff --git a/src/content-tags-drawer/data/apiHooks.ts b/src/content-tags-drawer/data/apiHooks.ts
index e00393da1..832154d4c 100644
--- a/src/content-tags-drawer/data/apiHooks.ts
+++ b/src/content-tags-drawer/data/apiHooks.ts
@@ -172,6 +172,7 @@ export const useContentTaxonomyTagsUpdater = (contentId: string) => {
// feature to support the legacy Django template courseware page.
// Sends content tags.
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
getContentTaxonomyTagsData(contentId).then((data) => {
const contentData = { contentId, ...data };
@@ -187,6 +188,7 @@ export const useContentTaxonomyTagsUpdater = (contentId: string) => {
});
// Sends tags count.
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
getContentTaxonomyTagsCount(contentId).then((count) => {
const contentData = { contentId, count };
diff --git a/src/course-checklist/CourseChecklist.test.jsx b/src/course-checklist/CourseChecklist.test.jsx
index e5bf6957b..5c03fe930 100644
--- a/src/course-checklist/CourseChecklist.test.jsx
+++ b/src/course-checklist/CourseChecklist.test.jsx
@@ -46,9 +46,9 @@ describe('CourseChecklistPage', () => {
});
describe('renders', () => {
describe('if enable_quality prop is true', () => {
- it('two checklist components ', () => {
+ it('two checklist components ', async () => {
renderComponent();
- mockStore(200);
+ await mockStore(200);
expect(screen.getByText(messages.launchChecklistLabel.defaultMessage)).toBeVisible();
@@ -67,7 +67,7 @@ describe('CourseChecklistPage', () => {
it('correct content when the launch checklist has loaded', async () => {
renderComponent();
- mockStore(404);
+ await mockStore(404);
await waitFor(() => {
const { launchChecklistStatus } = store.getState().courseChecklist.loadingStatus;
@@ -79,7 +79,7 @@ describe('CourseChecklistPage', () => {
it('correct content when the best practices checklist is loading', async () => {
renderComponent();
- mockStore(404);
+ await mockStore(404);
await waitFor(() => {
const { bestPracticeChecklistStatus } = store.getState().courseChecklist.loadingStatus;
@@ -100,9 +100,9 @@ describe('CourseChecklistPage', () => {
});
});
- it('one checklist components ', () => {
+ it('one checklist components ', async () => {
renderComponent();
- mockStore(200);
+ await mockStore(200);
expect(screen.getByText(messages.launchChecklistLabel.defaultMessage)).toBeVisible();
@@ -112,7 +112,7 @@ describe('CourseChecklistPage', () => {
describe('an aria-live region with', () => {
it('correct content when the launch checklist has loaded', async () => {
renderComponent();
- mockStore(404);
+ await mockStore(404);
await waitFor(() => {
const { launchChecklistStatus } = store.getState().courseChecklist.loadingStatus;
@@ -124,7 +124,7 @@ describe('CourseChecklistPage', () => {
it('correct content when the best practices checklist is loading', async () => {
renderComponent();
- mockStore(404);
+ await mockStore(404);
await waitFor(() => {
const { bestPracticeChecklistStatus } = store.getState().courseChecklist.loadingStatus;
diff --git a/src/course-libraries/LegacyLibContentBlockAlert.tsx b/src/course-libraries/LegacyLibContentBlockAlert.tsx
index 2aaad37b0..8f2551504 100644
--- a/src/course-libraries/LegacyLibContentBlockAlert.tsx
+++ b/src/course-libraries/LegacyLibContentBlockAlert.tsx
@@ -31,11 +31,13 @@ const LegacyLibContentBlockAlert = ({ courseId }: Props) => {
if (taskStatus.data?.state === UserTaskStatus.Succeeded) {
showToast(intl.formatMessage(messages.legacyLibReadyToMigrateTaskCompleted));
setTaskId(undefined);
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
refetch();
} else if (taskStatus.data?.state === UserTaskStatus.Failed
|| taskStatus.data?.state === UserTaskStatus.Cancelled) {
showToast(intl.formatMessage(messages.legacyLibReadyToMigrateTaskFailed));
setTaskId(undefined);
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
refetch();
} else if (taskId) {
showToast(intl.formatMessage(messages.legacyLibReadyToMigrateTaskInProgress));
diff --git a/src/course-outline/CourseOutline.test.tsx b/src/course-outline/CourseOutline.test.tsx
index 26a1ef52a..70e6dfe3a 100644
--- a/src/course-outline/CourseOutline.test.tsx
+++ b/src/course-outline/CourseOutline.test.tsx
@@ -471,11 +471,11 @@ describe('', () => {
const dummyBtn = await screen.findByRole('button', { name: 'Dummy button' });
fireEvent.click(dummyBtn);
- waitFor(() => expect(axiosMock.history.post.length).toBe(3));
+ await waitFor(() => expect(axiosMock.history.post.length).toBe(3));
const [section] = courseOutlineIndexMock.courseStructure.childInfo.children;
const [subsection] = section.childInfo.children;
- waitFor(() => {
+ await waitFor(() => {
expect(axiosMock.history.post[2].data).toBe(JSON.stringify({
type: COMPONENT_TYPES.libraryV2,
category: 'vertical',
@@ -509,10 +509,10 @@ describe('', () => {
const dummyBtn = await screen.findByRole('button', { name: 'Dummy button' });
fireEvent.click(dummyBtn);
- waitFor(() => expect(axiosMock.history.post.length).toBe(3));
+ await waitFor(() => expect(axiosMock.history.post.length).toBe(3));
const [section] = courseOutlineIndexMock.courseStructure.childInfo.children;
- waitFor(() => {
+ await waitFor(() => {
expect(axiosMock.history.post[2].data).toBe(JSON.stringify({
type: COMPONENT_TYPES.libraryV2,
category: 'sequential',
@@ -545,10 +545,10 @@ describe('', () => {
const dummyBtn = await screen.findByRole('button', { name: 'Dummy button' });
fireEvent.click(dummyBtn);
- waitFor(() => expect(axiosMock.history.post.length).toBe(3));
+ await waitFor(() => expect(axiosMock.history.post.length).toBe(3));
const courseUsageKey = courseOutlineIndexMock.courseStructure.id;
- waitFor(() => {
+ await waitFor(() => {
expect(axiosMock.history.post[2].data).toBe(JSON.stringify({
type: COMPONENT_TYPES.libraryV2,
category: 'chapter',
diff --git a/src/course-outline/OutlineAddChildButtons.tsx b/src/course-outline/OutlineAddChildButtons.tsx
index ceaa2ad1f..e06409275 100644
--- a/src/course-outline/OutlineAddChildButtons.tsx
+++ b/src/course-outline/OutlineAddChildButtons.tsx
@@ -321,6 +321,7 @@ const LegacyOutlineAddChildButtons = ({
}
const handleOnComponentSelected = (selected: SelectedComponent) => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
onUseLibraryContent(selected);
closeAddLibrarySectionModal();
};
diff --git a/src/course-outline/card-header/CardHeader.test.tsx b/src/course-outline/card-header/CardHeader.test.tsx
index 869bda8b2..05d5c4386 100644
--- a/src/course-outline/card-header/CardHeader.test.tsx
+++ b/src/course-outline/card-header/CardHeader.test.tsx
@@ -229,7 +229,7 @@ describe('', () => {
});
expect(await screen.findByTestId('subsection-edit-field')).toBeInTheDocument();
- waitFor(() => {
+ await waitFor(() => {
expect(screen.queryByTestId('subsection-card-header__expanded-btn')).not.toBeInTheDocument();
expect(screen.queryByTestId('edit-button')).not.toBeInTheDocument();
});
diff --git a/src/course-outline/hooks.jsx b/src/course-outline/hooks.jsx
index 1a486d9fd..43ce130d5 100644
--- a/src/course-outline/hooks.jsx
+++ b/src/course-outline/hooks.jsx
@@ -113,6 +113,7 @@ const useCourseOutline = ({ courseId }) => {
const headerNavigationsActions = {
handleNewSection: () => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
handleAddSection.mutateAsync({
type: ContainerType.Chapter,
parentLocator: courseStructure?.id,
diff --git a/src/course-outline/section-card/SectionCard.test.tsx b/src/course-outline/section-card/SectionCard.test.tsx
index ae1b3c764..22d4c3082 100644
--- a/src/course-outline/section-card/SectionCard.test.tsx
+++ b/src/course-outline/section-card/SectionCard.test.tsx
@@ -318,12 +318,12 @@ describe('', () => {
renderComponent();
const element = await screen.findByTestId('section-card');
const menu = await within(element).findByTestId('section-card-header__menu-button');
- await fireEvent.click(menu);
+ fireEvent.click(menu);
const manageTagsBtn = await within(element).findByTestId('section-card-header__menu-manage-tags-button');
expect(manageTagsBtn).toBeInTheDocument();
- await fireEvent.click(manageTagsBtn);
+ fireEvent.click(manageTagsBtn);
const drawer = await screen.findByRole('alert');
expect(within(drawer).getByText(/manage tags/i));
@@ -364,12 +364,12 @@ describe('', () => {
renderComponent();
const element = await screen.findByTestId('section-card');
const menu = await within(element).findByTestId('section-card-header__menu-button');
- await fireEvent.click(menu);
+ fireEvent.click(menu);
const manageTagsBtn = await within(element).findByTestId('section-card-header__menu-manage-tags-button');
expect(manageTagsBtn).toBeInTheDocument();
- await fireEvent.click(manageTagsBtn);
+ fireEvent.click(manageTagsBtn);
await waitFor(() => {
expect(mockSetCurrentPageKey).toHaveBeenCalledWith('align', section.id);
diff --git a/src/course-outline/status-bar/hooks.ts b/src/course-outline/status-bar/hooks.ts
index 9ea6ac0e8..833f2f9b6 100644
--- a/src/course-outline/status-bar/hooks.ts
+++ b/src/course-outline/status-bar/hooks.ts
@@ -32,6 +32,7 @@ export function useDynamicHookShim() {
}
}
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
load();
return () => {
diff --git a/src/course-outline/subsection-card/SubsectionCard.test.tsx b/src/course-outline/subsection-card/SubsectionCard.test.tsx
index d3e425a86..180ccf307 100644
--- a/src/course-outline/subsection-card/SubsectionCard.test.tsx
+++ b/src/course-outline/subsection-card/SubsectionCard.test.tsx
@@ -428,12 +428,12 @@ describe('', () => {
renderComponent();
const element = await screen.findByTestId('subsection-card');
const menu = await within(element).findByTestId('subsection-card-header__menu-button');
- await fireEvent.click(menu);
+ fireEvent.click(menu);
const manageTagsBtn = await within(element).findByTestId('subsection-card-header__menu-manage-tags-button');
expect(manageTagsBtn).toBeInTheDocument();
- await fireEvent.click(manageTagsBtn);
+ fireEvent.click(manageTagsBtn);
const drawer = await screen.findByRole('alert');
expect(within(drawer).getByText(/manage tags/i));
@@ -474,12 +474,12 @@ describe('', () => {
renderComponent();
const element = await screen.findByTestId('subsection-card');
const menu = await within(element).findByTestId('subsection-card-header__menu-button');
- await fireEvent.click(menu);
+ fireEvent.click(menu);
const manageTagsBtn = await within(element).findByTestId('subsection-card-header__menu-manage-tags-button');
expect(manageTagsBtn).toBeInTheDocument();
- await fireEvent.click(manageTagsBtn);
+ fireEvent.click(manageTagsBtn);
await waitFor(() => {
expect(mockSetCurrentPageKey).toHaveBeenCalledWith('align', subsection.id);
diff --git a/src/course-outline/unit-card/UnitCard.test.tsx b/src/course-outline/unit-card/UnitCard.test.tsx
index 964633641..cf29be757 100644
--- a/src/course-outline/unit-card/UnitCard.test.tsx
+++ b/src/course-outline/unit-card/UnitCard.test.tsx
@@ -286,12 +286,12 @@ describe('', () => {
renderComponent();
const element = await screen.findByTestId('unit-card');
const menu = await within(element).findByTestId('unit-card-header__menu-button');
- await fireEvent.click(menu);
+ fireEvent.click(menu);
const manageTagsBtn = await within(element).findByTestId('unit-card-header__menu-manage-tags-button');
expect(manageTagsBtn).toBeInTheDocument();
- await fireEvent.click(manageTagsBtn);
+ fireEvent.click(manageTagsBtn);
const drawer = await screen.findByRole('alert');
expect(within(drawer).getByText(/manage tags/i));
@@ -332,12 +332,12 @@ describe('', () => {
renderComponent();
const element = await screen.findByTestId('unit-card');
const menu = await within(element).findByTestId('unit-card-header__menu-button');
- await fireEvent.click(menu);
+ fireEvent.click(menu);
const manageTagsBtn = await within(element).findByTestId('unit-card-header__menu-manage-tags-button');
expect(manageTagsBtn).toBeInTheDocument();
- await fireEvent.click(manageTagsBtn);
+ fireEvent.click(manageTagsBtn);
await waitFor(() => {
expect(mockSetCurrentPageKey).toHaveBeenCalledWith('align', unit.id);
diff --git a/src/course-outline/unit-card/UnitCard.tsx b/src/course-outline/unit-card/UnitCard.tsx
index d8f092765..922a6ab38 100644
--- a/src/course-outline/unit-card/UnitCard.tsx
+++ b/src/course-outline/unit-card/UnitCard.tsx
@@ -157,6 +157,7 @@ const UnitCard = ({
};
const handleCopyClick = () => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
copyToClipboard(id);
};
diff --git a/src/course-rerun/CourseRerun.test.jsx b/src/course-rerun/CourseRerun.test.jsx
index cc1373bfa..bda92ffea 100644
--- a/src/course-rerun/CourseRerun.test.jsx
+++ b/src/course-rerun/CourseRerun.test.jsx
@@ -17,6 +17,13 @@ jest.mock('react-redux', () => ({
useSelector: jest.fn(),
}));
+const mockNavigate = jest.fn();
+
+jest.mock('react-router-dom', () => ({
+ ...jest.requireActual('react-router-dom'), // use actual for all non-hook parts
+ useNavigate: () => mockNavigate,
+}));
+
describe('', () => {
beforeEach(() => {
const { axiosMock } = initializeMocks();
@@ -30,13 +37,13 @@ describe('', () => {
expect(getAllByRole('button', { name: messages.cancelButton.defaultMessage }).length).toBe(2);
});
- it('should navigate to /home on cancel button click', () => {
+ it('should navigate to /home on cancel button click', async () => {
const { getAllByRole } = render();
const cancelButton = getAllByRole('button', { name: messages.cancelButton.defaultMessage })[0];
fireEvent.click(cancelButton);
- waitFor(() => {
- expect(window.location.pathname).toBe('/home');
+ await waitFor(() => {
+ expect(mockNavigate).toHaveBeenCalledWith('/home');
});
});
diff --git a/src/course-unit/CourseUnit.test.jsx b/src/course-unit/CourseUnit.test.jsx
index fcfc0b33b..377a8197d 100644
--- a/src/course-unit/CourseUnit.test.jsx
+++ b/src/course-unit/CourseUnit.test.jsx
@@ -7,7 +7,14 @@ import {
import { cloneDeep, set } from 'lodash';
import {
- act, fireEvent, render, waitFor, within, screen, initializeMocks,
+ act,
+ cleanup,
+ fireEvent,
+ initializeMocks,
+ render,
+ waitFor,
+ within,
+ screen,
} from '@src/testUtils';
import { IFRAME_FEATURE_POLICY } from '@src/constants';
import { mockWaffleFlags } from '@src/data/apiHooks.mock';
@@ -790,9 +797,10 @@ describe('', () => {
.reply(200, {
...updatedCourseSectionVerticalData,
});
+ cleanup(); // clear the first render before we create the second.
render();
// to wait for loading
- screen.findByTestId('unit-header-title');
+ await screen.findByTestId('unit-header-title');
// The new unit button should not be visible when childAddable is false
expect(
screen.queryByRole('button', { name: courseSequenceMessages.newUnitBtnText.defaultMessage }),
diff --git a/src/course-unit/unit-sidebar/unit-info/UnitInfoSidebar.tsx b/src/course-unit/unit-sidebar/unit-info/UnitInfoSidebar.tsx
index 446a6fc6d..9ab706963 100644
--- a/src/course-unit/unit-sidebar/unit-info/UnitInfoSidebar.tsx
+++ b/src/course-unit/unit-sidebar/unit-info/UnitInfoSidebar.tsx
@@ -88,6 +88,7 @@ const UnitInfoSettings = () => {
groupAccess: Object | null,
isDiscussionEnabled: boolean,
) => {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
await dispatch(editCourseUnitVisibilityAndData(
id,
PUBLISH_TYPES.republish,
diff --git a/src/course-updates/update-form/UpdateForm.jsx b/src/course-updates/update-form/UpdateForm.jsx
index f31109bdc..dfe9b1d70 100644
--- a/src/course-updates/update-form/UpdateForm.jsx
+++ b/src/course-updates/update-form/UpdateForm.jsx
@@ -83,8 +83,10 @@ const UpdateForm = ({
showPopperArrow={false}
onChange={(value) => {
if (!isValidDate(value)) {
+ /* istanbul ignore next */
return;
}
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('date', convertToStringFromDate(value));
}}
/>
@@ -103,8 +105,8 @@ const UpdateForm = ({
data-testid="course-updates-wisiwyg-editor"
name={contentFieldName}
minHeight={300}
- onChange={(value) => {
- setFieldValue(contentFieldName, value || DEFAULT_EMPTY_WYSIWYG_VALUE);
+ onChange={/* istanbul ignore next: we can't test WYSIWYG editors */async (value) => {
+ await setFieldValue(contentFieldName, value || DEFAULT_EMPTY_WYSIWYG_VALUE);
}}
/>
diff --git a/src/files-and-videos/files-page/data/api.js b/src/files-and-videos/files-page/data/api.js
index 4614a946d..fe34ff8db 100644
--- a/src/files-and-videos/files-page/data/api.js
+++ b/src/files-and-videos/files-page/data/api.js
@@ -70,7 +70,7 @@ export async function getDownload(selectedRows, courseId) {
definedAssets.forEach((assetBlob, index) => {
folder.file(assetNames[index], assetBlob.value, { blob: true });
});
- zip.generateAsync({ type: 'blob' }).then(content => {
+ await zip.generateAsync({ type: 'blob' }).then(content => {
saveAs(content, `${courseId}-assets-${date}.zip`);
});
}
diff --git a/src/files-and-videos/generic/table-components/table-custom-columns/MoreInfoColumn.jsx b/src/files-and-videos/generic/table-components/table-custom-columns/MoreInfoColumn.jsx
index 9f5476c2e..c389ec5fd 100644
--- a/src/files-and-videos/generic/table-components/table-custom-columns/MoreInfoColumn.jsx
+++ b/src/files-and-videos/generic/table-components/table-custom-columns/MoreInfoColumn.jsx
@@ -58,6 +58,7 @@ const MoreInfoColumn = ({
as={Button}
variant="tertiary"
onClick={() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
navigator.clipboard.writeText(id);
close();
}}
@@ -70,6 +71,7 @@ const MoreInfoColumn = ({
as={Button}
variant="tertiary"
onClick={() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
navigator.clipboard.writeText(portableUrl);
close();
}}
@@ -80,6 +82,7 @@ const MoreInfoColumn = ({
as={Button}
variant="tertiary"
onClick={() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
navigator.clipboard.writeText(externalUrl);
close();
}}
diff --git a/src/files-and-videos/videos-page/data/thunks.js b/src/files-and-videos/videos-page/data/thunks.js
index cfc94ca4a..d9e94ca16 100644
--- a/src/files-and-videos/videos-page/data/thunks.js
+++ b/src/files-and-videos/videos-page/data/thunks.js
@@ -55,6 +55,7 @@ export function cancelAllUploads(courseId, uploadData) {
});
Object.entries(uploadData).forEach(([key, value]) => {
if (value.status === RequestStatus.IN_PROGRESS) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
updateVideoUploadStatus(
courseId,
key,
@@ -178,6 +179,7 @@ export function markVideoUploadsInProgressAsFailed({ uploadingIdsRef, courseId }
return (dispatch) => {
Object.keys(uploadingIdsRef.current.uploadData).forEach((edxVideoId) => {
try {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
updateVideoUploadStatus(
courseId,
edxVideoId || '',
@@ -246,7 +248,7 @@ const uploadToBucket = async ({
...currentVideoData,
status: RequestStatus.SUCCESSFUL,
};
- updateVideoUploadStatus(
+ await updateVideoUploadStatus(
courseId,
edxVideoId,
'Upload completed',
@@ -270,7 +272,7 @@ const uploadToBucket = async ({
status: RequestStatus.FAILED,
};
}
- updateVideoUploadStatus(
+ await updateVideoUploadStatus(
courseId,
edxVideoId || '',
'Upload failed',
diff --git a/src/generic/create-or-rerun-course/CreateOrRerunCourseForm.jsx b/src/generic/create-or-rerun-course/CreateOrRerunCourseForm.jsx
index 36bafc597..71f9f7577 100644
--- a/src/generic/create-or-rerun-course/CreateOrRerunCourseForm.jsx
+++ b/src/generic/create-or-rerun-course/CreateOrRerunCourseForm.jsx
@@ -155,6 +155,7 @@ const CreateOrRerunCourseForm = ({
const handleCustomBlurForDropdown = (e) => {
// it needs to correct handleOnChange Form.Autosuggest
const { value, name } = e.target;
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue(name, value);
handleBlur(e);
};
diff --git a/src/generic/data/api.test.js b/src/generic/data/api.test.js
index eeac9c65c..6c544f06e 100644
--- a/src/generic/data/api.test.js
+++ b/src/generic/data/api.test.js
@@ -88,7 +88,7 @@ describe('generic api calls', () => {
it('should throw an error if no pattern is provided', async () => {
const pattern = undefined;
- expect(getTagsCount(pattern)).rejects.toThrow('contentPattern is required');
+ await expect(getTagsCount(pattern)).rejects.toThrow('contentPattern is required');
expect(axiosMock.history.get.length).toEqual(0);
});
});
diff --git a/src/generic/inplace-text-editor/index.tsx b/src/generic/inplace-text-editor/index.tsx
index 8378269a4..0023dafe7 100644
--- a/src/generic/inplace-text-editor/index.tsx
+++ b/src/generic/inplace-text-editor/index.tsx
@@ -58,6 +58,7 @@ export const InplaceTextEditor: React.FC = ({
const handleOnKeyDown = (event: React.KeyboardEvent) => {
if (event.key === 'Enter') {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
handleOnChangeText(event);
} else if (event.key === 'Escape') {
setIsActive(false);
diff --git a/src/legacy-libraries-migration/LegacyLibMigrationPage.tsx b/src/legacy-libraries-migration/LegacyLibMigrationPage.tsx
index 3f402c20f..ebd6637d8 100644
--- a/src/legacy-libraries-migration/LegacyLibMigrationPage.tsx
+++ b/src/legacy-libraries-migration/LegacyLibMigrationPage.tsx
@@ -114,6 +114,7 @@ export const LegacyLibMigrationPage = () => {
break;
case 'confirmation-view':
setConfirmationButtonState('pending');
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
handleMigrate();
break;
default:
diff --git a/src/library-authoring/LibraryAuthoringPage.test.tsx b/src/library-authoring/LibraryAuthoringPage.test.tsx
index b590ace94..9406cc7f0 100644
--- a/src/library-authoring/LibraryAuthoringPage.test.tsx
+++ b/src/library-authoring/LibraryAuthoringPage.test.tsx
@@ -431,7 +431,7 @@ describe('', () => {
expect(mockResult0.display_name).toStrictEqual(displayName);
await renderLibraryPage();
- waitFor(() => expect(screen.getAllByTestId('component-card-menu-toggle').length).toBeGreaterThan(0));
+ await waitFor(() => expect(screen.getAllByTestId('component-card-menu-toggle').length).toBeGreaterThan(0));
// Open menu
fireEvent.click((await screen.findAllByTestId('component-card-menu-toggle'))[0]);
@@ -455,7 +455,7 @@ describe('', () => {
const displayName = 'Test Unit';
await renderLibraryPage();
- waitFor(() => expect(screen.getAllByTestId('container-card-menu-toggle').length).toBeGreaterThan(0));
+ await waitFor(() => expect(screen.getAllByTestId('container-card-menu-toggle').length).toBeGreaterThan(0));
// Open menu
fireEvent.click((await screen.findAllByTestId('container-card-menu-toggle'))[0]);
diff --git a/src/library-authoring/add-content/AddContent.test.tsx b/src/library-authoring/add-content/AddContent.test.tsx
index 58c06490d..e352a5813 100644
--- a/src/library-authoring/add-content/AddContent.test.tsx
+++ b/src/library-authoring/add-content/AddContent.test.tsx
@@ -93,7 +93,7 @@ describe('', () => {
expect(screen.queryByRole('button', { name: /video/i })).toBeInTheDocument();
expect(screen.queryByRole('button', { name: /copy from clipboard/i })).not.toBeInTheDocument();
expect(await screen.findByRole('button', { name: /advanced \/ other/i })).toBeInTheDocument();
- expect(await screen.queryByRole('button', { name: /existing library content/i })).not.toBeInTheDocument();
+ expect(screen.queryByRole('button', { name: /existing library content/i })).not.toBeInTheDocument();
});
it('should render advanced content buttons', async () => {
diff --git a/src/library-authoring/component-info/ComponentAdvancedAssets.tsx b/src/library-authoring/component-info/ComponentAdvancedAssets.tsx
index cddac1aa6..5e42fc63b 100644
--- a/src/library-authoring/component-info/ComponentAdvancedAssets.tsx
+++ b/src/library-authoring/component-info/ComponentAdvancedAssets.tsx
@@ -59,6 +59,7 @@ export const ComponentAdvancedAssets: React.FC> = () => {
const deleter = useDeleteXBlockAsset(usageKey);
const [filePathToDelete, setConfirmDeleteAsset] = React.useState('');
const deleteFile = React.useCallback(() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
deleter.mutateAsync(filePathToDelete); // Don't wait for this before clearing the modal on the next line
setConfirmDeleteAsset('');
}, [filePathToDelete, usageKey]);
diff --git a/src/library-authoring/component-info/ComponentInfo.test.tsx b/src/library-authoring/component-info/ComponentInfo.test.tsx
index 695c59764..168fdc2a2 100644
--- a/src/library-authoring/component-info/ComponentInfo.test.tsx
+++ b/src/library-authoring/component-info/ComponentInfo.test.tsx
@@ -143,7 +143,7 @@ describe(' Sidebar', () => {
// Should show the confirmation box
expect(await screen.findByText(/Confirm Publish/i)).toBeInTheDocument();
- const secondPublishButton = await screen.getByRole('button', { name: /publish/i });
+ const secondPublishButton = screen.getByRole('button', { name: /publish/i });
secondPublishButton.click();
});
@@ -160,7 +160,7 @@ describe(' Sidebar', () => {
// Should show the confirmation box
expect(await screen.findByText(/Confirm Publish/i)).toBeInTheDocument();
- const secondPublishButton = await screen.getByRole('button', { name: /publish/i });
+ const secondPublishButton = screen.getByRole('button', { name: /publish/i });
secondPublishButton.click();
});
@@ -177,7 +177,7 @@ describe(' Sidebar', () => {
// Should show the confirmation box
expect(await screen.findByText(/Confirm Publish/i)).toBeInTheDocument();
- const secondPublishButton = await screen.getByRole('button', { name: /publish/i });
+ const secondPublishButton = screen.getByRole('button', { name: /publish/i });
secondPublishButton.click();
});
@@ -195,7 +195,7 @@ describe(' Sidebar', () => {
// Should show the confirmation box
expect(await screen.findByText(/Confirm Publish/i)).toBeInTheDocument();
- const secondPublishButton = await screen.getByRole('button', { name: /publish/i });
+ const secondPublishButton = screen.getByRole('button', { name: /publish/i });
secondPublishButton.click();
await waitFor(() => {
@@ -217,7 +217,7 @@ describe(' Sidebar', () => {
// Should show the confirmation box
expect(await screen.findByText(/Confirm Publish/i)).toBeInTheDocument();
- const secondPublishButton = await screen.getByRole('button', { name: /publish/i });
+ const secondPublishButton = screen.getByRole('button', { name: /publish/i });
secondPublishButton.click();
await waitFor(() => {
diff --git a/src/library-authoring/component-info/ComponentInfo.tsx b/src/library-authoring/component-info/ComponentInfo.tsx
index 55c2a8983..ff2ea379b 100644
--- a/src/library-authoring/component-info/ComponentInfo.tsx
+++ b/src/library-authoring/component-info/ComponentInfo.tsx
@@ -62,6 +62,7 @@ const AddComponentWidget = () => {
variant="outline-primary"
className="m-1 text-nowrap flex-grow-1"
onClick={() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
onComponentSelected({ usageKey, blockType: getBlockType(usageKey) });
}}
>
@@ -78,8 +79,10 @@ const AddComponentWidget = () => {
blockType: getBlockType(usageKey),
};
if (!isChecked) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
addComponentToSelectedComponents(selectedComponent);
} else {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
removeComponentFromSelectedComponents(selectedComponent);
}
};
diff --git a/src/library-authoring/component-info/ComponentUsageTab.test.tsx b/src/library-authoring/component-info/ComponentUsageTab.test.tsx
index c6de97fc4..81ab37457 100644
--- a/src/library-authoring/component-info/ComponentUsageTab.test.tsx
+++ b/src/library-authoring/component-info/ComponentUsageTab.test.tsx
@@ -50,8 +50,8 @@ describe('', () => {
render(mockLibraryBlockMetadata.usageKeyPublished);
expect(await screen.findByText('text block 0')).toBeInTheDocument();
- expect(await screen.getByText('4 Units')).toBeInTheDocument();
- expect(await screen.getByText('3 Subsections')).toBeInTheDocument();
- expect(await screen.getByText('2 Sections')).toBeInTheDocument();
+ expect(screen.getByText('4 Units')).toBeInTheDocument();
+ expect(screen.getByText('3 Subsections')).toBeInTheDocument();
+ expect(screen.getByText('2 Sections')).toBeInTheDocument();
});
});
diff --git a/src/library-authoring/components/AddComponentWidget.tsx b/src/library-authoring/components/AddComponentWidget.tsx
index 05bcfd194..30715b05f 100644
--- a/src/library-authoring/components/AddComponentWidget.tsx
+++ b/src/library-authoring/components/AddComponentWidget.tsx
@@ -69,8 +69,10 @@ const AddComponentWidget = ({ usageKey, blockType }: AddComponentWidgetProps) =>
blockType,
};
if (!isChecked) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
addComponentToSelectedComponents(selectedComponent);
} else {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
removeComponentFromSelectedComponents(selectedComponent);
}
};
diff --git a/src/library-authoring/components/ComponentMenu.tsx b/src/library-authoring/components/ComponentMenu.tsx
index 940b9c5bf..6e07dc6d7 100644
--- a/src/library-authoring/components/ComponentMenu.tsx
+++ b/src/library-authoring/components/ComponentMenu.tsx
@@ -54,6 +54,7 @@ export const ComponentMenu = ({ usageKey, index }: Props) => {
const { copyToClipboard } = useClipboard();
const updateClipboardClick = () => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
copyToClipboard(usageKey);
};
diff --git a/src/library-authoring/containers/ContainerCard.tsx b/src/library-authoring/containers/ContainerCard.tsx
index 4726e21ab..14a224cdc 100644
--- a/src/library-authoring/containers/ContainerCard.tsx
+++ b/src/library-authoring/containers/ContainerCard.tsx
@@ -95,6 +95,7 @@ export const ContainerMenu = ({ containerKey, displayName, index } : ContainerMe
}, [navigateTo, containerKey]);
const handleCopy = useCallback(() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
copyToClipboard(containerKey);
}, [copyToClipboard, containerKey]);
diff --git a/src/library-authoring/containers/ContainerInfo.tsx b/src/library-authoring/containers/ContainerInfo.tsx
index 7ea723b57..07c245158 100644
--- a/src/library-authoring/containers/ContainerInfo.tsx
+++ b/src/library-authoring/containers/ContainerInfo.tsx
@@ -44,6 +44,7 @@ const ContainerMenu = ({ containerId }: ContainerPreviewProps) => {
const { copyToClipboard } = useClipboard();
const handleCopy = useCallback(() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
copyToClipboard(containerId);
}, [copyToClipboard, containerId]);
diff --git a/src/library-authoring/hierarchy/ItemHierarchyPublisher.tsx b/src/library-authoring/hierarchy/ItemHierarchyPublisher.tsx
index 6df4b418b..a70af3752 100644
--- a/src/library-authoring/hierarchy/ItemHierarchyPublisher.tsx
+++ b/src/library-authoring/hierarchy/ItemHierarchyPublisher.tsx
@@ -123,10 +123,10 @@ export const ItemHierarchyPublisher = ({
{intl.formatMessage(messages.publishCancel)}
{
+ onClick={(e) => {
e.preventDefault();
e.stopPropagation();
- await handlePublish();
+ handlePublish();
}}
variant="primary rounded-0"
label={intl.formatMessage(messages.publishConfirm)}
diff --git a/src/library-authoring/import-course/ImportDetailsPage.test.tsx b/src/library-authoring/import-course/ImportDetailsPage.test.tsx
index 757d71a7a..34d10d626 100644
--- a/src/library-authoring/import-course/ImportDetailsPage.test.tsx
+++ b/src/library-authoring/import-course/ImportDetailsPage.test.tsx
@@ -104,7 +104,7 @@ describe('', () => {
name: /view imported content/i,
});
- await viewImportedContentBtn.click();
+ viewImportedContentBtn.click();
await waitFor(() => expect(mockNavigate).toHaveBeenCalledWith('/library/lib:Axim:TEST/collection/coll'));
});
diff --git a/src/library-authoring/import-course/ImportDetailsPage.tsx b/src/library-authoring/import-course/ImportDetailsPage.tsx
index 770b56862..763712cfb 100644
--- a/src/library-authoring/import-course/ImportDetailsPage.tsx
+++ b/src/library-authoring/import-course/ImportDetailsPage.tsx
@@ -132,6 +132,7 @@ const ImportDetailsContent = () => {
migrationStatus = 'Failed';
} else if (migrationStatusData?.state === 'Succeeded') {
// refetch migrationBlockInfo data once the import is complete
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
refetchMigrationBlockInfo();
// Currently, bulk migrate is being used to migrate courses because
// it has the ability to create collections.
diff --git a/src/optimizer-page/scan-results/ScanResults.tsx b/src/optimizer-page/scan-results/ScanResults.tsx
index b91e38e39..2ca8d1e53 100644
--- a/src/optimizer-page/scan-results/ScanResults.tsx
+++ b/src/optimizer-page/scan-results/ScanResults.tsx
@@ -460,6 +460,7 @@ const ScanResults: FC = ({
const handleUpdateCompletion = async () => {
if (rerunLinkUpdateInProgress === false && isUpdateAllInProgress) {
try {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
const updateStatusResponse = await dispatch(fetchRerunLinkUpdateStatus(courseId)) as any;
if (!updateStatusResponse) {
@@ -506,6 +507,7 @@ const ScanResults: FC = ({
}
};
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
handleUpdateCompletion();
}, [rerunLinkUpdateInProgress,
isUpdateAllInProgress,
@@ -590,6 +592,7 @@ const ScanResults: FC = ({
try {
setUpdatingLinkIds(prev => ({ ...prev, [uniqueId]: true }));
const contentType = getContentType(sectionId || '');
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
await dispatch(updateSinglePreviousRunLink(courseId, link, blockId, contentType));
const pollForSingleLinkResult = async (attempts = 0): Promise => {
@@ -597,6 +600,7 @@ const ScanResults: FC = ({
throw new Error('Timeout waiting for link update result');
}
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
const updateStatusResponse = await dispatch(fetchRerunLinkUpdateStatus(courseId)) as any;
const pollStatus = updateStatusResponse?.status || updateStatusResponse?.updateStatus;
@@ -755,6 +759,7 @@ const ScanResults: FC = ({
try {
setProcessedResponseIds(new Set());
setIsUpdateAllInProgress(true);
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
await dispatch(updateAllPreviousRunLinks(courseId));
return true;
diff --git a/src/pages-and-resources/app-settings-modal/AppSettingsModal.jsx b/src/pages-and-resources/app-settings-modal/AppSettingsModal.jsx
index 429a9677f..1251394e1 100644
--- a/src/pages-and-resources/app-settings-modal/AppSettingsModal.jsx
+++ b/src/pages-and-resources/app-settings-modal/AppSettingsModal.jsx
@@ -72,13 +72,14 @@ const AppSettingsModal = ({
const handleFormSubmit = async (values) => {
let success = true;
if (appInfo.enabled !== values.enabled) {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
success = await dispatch(updateAppStatus(courseId, appInfo.id, values.enabled));
}
// Call the submit handler for the settings component to save its settings
if (onSettingsSave) {
success = success && await onSettingsSave(values);
}
- await setSaveError(!success);
+ setSaveError(!success);
!success && alertRef?.current.scrollIntoView(); // eslint-disable-line @typescript-eslint/no-unused-expressions
};
@@ -86,7 +87,8 @@ const AppSettingsModal = ({
// If submitting the form with errors, show the alert and scroll to it.
await handleSubmit(event);
if (Object.keys(errors).length > 0) {
- await setSaveError(true);
+ /* istanbul ignore next: temp to unblock lint cleanup. We probably should test this. */
+ setSaveError(true);
alertRef?.current.scrollIntoView?.(); // eslint-disable-line no-unused-expressions
}
};
diff --git a/src/pages-and-resources/discussions/app-config-form/AppConfigForm.jsx b/src/pages-and-resources/discussions/app-config-form/AppConfigForm.jsx
index b921ed901..1358f997a 100644
--- a/src/pages-and-resources/discussions/app-config-form/AppConfigForm.jsx
+++ b/src/pages-and-resources/discussions/app-config-form/AppConfigForm.jsx
@@ -46,7 +46,9 @@ const AppConfigForm = ({
const [confirmationDialogVisible, setConfirmationDialogVisible] = useState(false);
useEffect(() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
(async () => {
+ // oxlint-disable-next-line @typescript-eslint/await-thenable - this dispatch() IS returning a promise.
await dispatch(fetchDiscussionSettings(courseId, selectedAppId));
setLoading(false);
})();
diff --git a/src/pages-and-resources/discussions/app-config-form/apps/shared/DiscussionRestriction.jsx b/src/pages-and-resources/discussions/app-config-form/apps/shared/DiscussionRestriction.jsx
index 3fbee41c1..66691d0f1 100644
--- a/src/pages-and-resources/discussions/app-config-form/apps/shared/DiscussionRestriction.jsx
+++ b/src/pages-and-resources/discussions/app-config-form/apps/shared/DiscussionRestriction.jsx
@@ -24,12 +24,14 @@ const DiscussionRestriction = () => {
setSelectedRestrictionOption(value);
if (value !== discussionRestriction.ENABLED) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('postingRestrictions', value);
}
}, []);
const handleConfirmation = useCallback(() => {
setSelectedRestrictionOption(discussionRestriction.ENABLED);
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('postingRestrictions', discussionRestriction.ENABLED);
}, []);
diff --git a/src/pages-and-resources/discussions/app-config-form/apps/shared/DivisionByGroupFields.jsx b/src/pages-and-resources/discussions/app-config-form/apps/shared/DivisionByGroupFields.jsx
index b85c9b289..cb39ff67b 100644
--- a/src/pages-and-resources/discussions/app-config-form/apps/shared/DivisionByGroupFields.jsx
+++ b/src/pages-and-resources/discussions/app-config-form/apps/shared/DivisionByGroupFields.jsx
@@ -36,10 +36,13 @@ const DivisionByGroupFields = () => {
useEffect(() => {
if (divideByCohorts) {
if (!divideCourseTopicsByCohorts && size(discussionTopics) !== size(divideDiscussionIds)) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('divideDiscussionIds', discussionTopics.map(topic => topic.id));
}
} else {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('divideDiscussionIds', []);
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('divideCourseTopicsByCohorts', false);
}
}, [
@@ -59,6 +62,7 @@ const DivisionByGroupFields = () => {
const handleDivideCourseTopicsByCohortsToggle = (event) => {
const { checked } = event.target;
if (!checked) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('divideDiscussionIds', []);
}
handleChange(event);
diff --git a/src/pages-and-resources/discussions/app-config-form/apps/shared/InContextDiscussionFields.jsx b/src/pages-and-resources/discussions/app-config-form/apps/shared/InContextDiscussionFields.jsx
index ed825ffee..38efa6fd6 100644
--- a/src/pages-and-resources/discussions/app-config-form/apps/shared/InContextDiscussionFields.jsx
+++ b/src/pages-and-resources/discussions/app-config-form/apps/shared/InContextDiscussionFields.jsx
@@ -19,6 +19,7 @@ const InContextDiscussionFields = ({
const [showPopup, setShowPopup] = useState(false);
const handleConfirmation = () => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('enableGradedUnits', !values.enableGradedUnits);
setShowPopup(false);
};
diff --git a/src/pages-and-resources/discussions/app-config-form/apps/shared/discussion-restrictions/RestrictionSchedules.jsx b/src/pages-and-resources/discussions/app-config-form/apps/shared/discussion-restrictions/RestrictionSchedules.jsx
index 3a61dfa00..d0f135433 100644
--- a/src/pages-and-resources/discussions/app-config-form/apps/shared/discussion-restrictions/RestrictionSchedules.jsx
+++ b/src/pages-and-resources/discussions/app-config-form/apps/shared/discussion-restrictions/RestrictionSchedules.jsx
@@ -29,6 +29,7 @@ const RestrictionSchedules = () => {
...updatedRestrictedDates[index],
status: checkStatus(denormalizeRestrictedDate(updatedRestrictedDates[index])),
};
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('restrictedDates', updatedRestrictedDates);
}, [restrictedDates]);
@@ -43,7 +44,7 @@ const RestrictionSchedules = () => {
const onAddNewItem = useCallback(async (push) => {
await push(newRestrictedDateItem);
- validateForm();
+ await validateForm();
}, []);
return (
diff --git a/src/pages-and-resources/discussions/app-config-form/apps/shared/discussion-topics/DiscussionTopics.jsx b/src/pages-and-resources/discussions/app-config-form/apps/shared/discussion-topics/DiscussionTopics.jsx
index 1fed01969..15b392ad2 100644
--- a/src/pages-and-resources/discussions/app-config-form/apps/shared/discussion-topics/DiscussionTopics.jsx
+++ b/src/pages-and-resources/discussions/app-config-form/apps/shared/discussion-topics/DiscussionTopics.jsx
@@ -26,13 +26,14 @@ const DiscussionTopics = () => {
const handleTopicDelete = async (topicIndex, topicId, remove) => {
await remove(topicIndex);
- validateForm();
+ await validateForm();
setValidDiscussionTopics(filterItemFromObject(validDiscussionTopics, 'id', topicId));
};
const handleOnFocus = useCallback((id, hasError) => {
if (hasError) {
setValidDiscussionTopics(currentValidTopics => filterItemFromObject(currentValidTopics, 'id', id));
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('divideDiscussionIds', filterItemFromObject(divideDiscussionIds, 'id', id));
} else {
setValidDiscussionTopics(currentValidTopics => {
@@ -40,6 +41,7 @@ const DiscussionTopics = () => {
const allValidTopics = removeElements(allDiscussionTopics, topic => topic.name !== '');
return uniqBy(allValidTopics, 'id');
});
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
setFieldValue('divideDiscussionIds', uniq([...divideDiscussionIds, id]));
}
}, [divideDiscussionIds, discussionTopics]);
diff --git a/src/search-manager/data/api.mock.ts b/src/search-manager/data/api.mock.ts
index 8ddd3738e..f1332a992 100644
--- a/src/search-manager/data/api.mock.ts
+++ b/src/search-manager/data/api.mock.ts
@@ -107,7 +107,7 @@ mockFetchIndexDocuments.applyMock = () => {
/**
* Mock the useGetContentHits
*/
-export async function mockGetContentHits(
+export function mockGetContentHits(
mockResponse: 'noHits' | 'someHits',
) {
fetchMock.post(mockContentSearchConfig.searchEndpointUrl, () => {
diff --git a/src/search-manager/data/apiHooks.ts b/src/search-manager/data/apiHooks.ts
index 34a785393..5ef76580e 100644
--- a/src/search-manager/data/apiHooks.ts
+++ b/src/search-manager/data/apiHooks.ts
@@ -187,7 +187,12 @@ export const useContentSearchResults = ({
// Call this to load more pages. We include some "safety" features recommended by the docs: this should never be
// called while already fetching a page, and parameters (like 'event') should not be passed into fetchNextPage().
// See https://tanstack.com/query/v4/docs/framework/react/guides/infinite-queries
- fetchNextPage: () => { if (!query.isFetching && !query.isFetchingNextPage) { query.fetchNextPage(); } },
+ fetchNextPage: /* istanbul ignore next */ () => {
+ if (!query.isFetching && !query.isFetchingNextPage) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ query.fetchNextPage();
+ }
+ },
hasNextPage: query.hasNextPage,
// The last page has the most accurate count of total hits
totalHits: pages?.[pages.length - 1]?.totalHits ?? 0,
diff --git a/src/taxonomy/TaxonomyListPage.test.tsx b/src/taxonomy/TaxonomyListPage.test.tsx
index be71ea5f9..0f2dac845 100644
--- a/src/taxonomy/TaxonomyListPage.test.tsx
+++ b/src/taxonomy/TaxonomyListPage.test.tsx
@@ -175,7 +175,7 @@ describe('', () => {
} = render();
// Open the taxonomies org filter select menu
- const taxonomiesFilterSelectMenu = await getByRole('button', { name: 'All taxonomies' });
+ const taxonomiesFilterSelectMenu = getByRole('button', { name: 'All taxonomies' });
fireEvent.click(taxonomiesFilterSelectMenu);
// Check that the 'Unassigned' option is correctly called
diff --git a/src/taxonomy/taxonomy-menu/TaxonomyMenu.jsx b/src/taxonomy/taxonomy-menu/TaxonomyMenu.jsx
index fce069a95..8d7144056 100644
--- a/src/taxonomy/taxonomy-menu/TaxonomyMenu.jsx
+++ b/src/taxonomy/taxonomy-menu/TaxonomyMenu.jsx
@@ -41,6 +41,7 @@ const TaxonomyMenu = ({
const { setToastMessage } = useContext(TaxonomyContext);
const onDeleteTaxonomy = useCallback(() => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
deleteTaxonomy({ pk: taxonomy.id }, {
onSuccess: () => {
if (setToastMessage) {
diff --git a/src/textbooks/textbook-card/TextbooksCard.test.jsx b/src/textbooks/textbook-card/TextbooksCard.test.jsx
index 4cd334db9..c6cd41e7f 100644
--- a/src/textbooks/textbook-card/TextbooksCard.test.jsx
+++ b/src/textbooks/textbook-card/TextbooksCard.test.jsx
@@ -175,7 +175,7 @@ describe('', () => {
.onDelete(getEditTextbooksApiUrl(courseId, textbookId))
.reply(200);
- executeThunk(deleteTextbookQuery(courseId, textbookId), store.dispatch);
+ await executeThunk(deleteTextbookQuery(courseId, textbookId), store.dispatch);
});
});
});