From f417016ee016c40c62ab770692583f544e434445 Mon Sep 17 00:00:00 2001 From: Fran McDade Date: Tue, 19 Nov 2024 13:47:18 +1000 Subject: [PATCH] feat: added tests for file facets status (#264) --- src/providers/fileManifestState.tsx | 26 +----- src/providers/fileManifestState/constants.ts | 26 +++++- tests/updateFilesFacetsStatus.test.ts | 84 ++++++++++++++++++++ 3 files changed, 112 insertions(+), 24 deletions(-) create mode 100644 tests/updateFilesFacetsStatus.test.ts diff --git a/src/providers/fileManifestState.tsx b/src/providers/fileManifestState.tsx index 5873c651..36200a5b 100644 --- a/src/providers/fileManifestState.tsx +++ b/src/providers/fileManifestState.tsx @@ -28,29 +28,9 @@ import { useFetchFilesFacets } from "../hooks/useFileManifest/useFetchFilesFacet import { useFetchSummary } from "../hooks/useFileManifest/useFetchSummary"; import { useFileManifestURL } from "../hooks/useFileManifest/useFileManifestURL"; import { updateFileManifestAction } from "./fileManifestState/actions"; +import { FILE_MANIFEST_STATE } from "./fileManifestState/constants"; import { getRequestFilters } from "./fileManifestState/utils"; -// Default file manifest state. -export const DEFAULT_FILE_MANIFEST_STATE: FileManifestState = { - fileManifestFormat: undefined, - fileManifestType: undefined, - fileSummary: undefined, - fileSummaryFacetName: undefined, - fileSummaryFilters: [], - filesFacets: [], - filesFacetsStatus: FILES_FACETS_STATUS.NOT_STARTED, - filters: [], - isEnabled: false, - isFacetsLoading: false, - isFacetsSuccess: false, - isFileSummaryLoading: false, - isLoading: false, - isSummaryLoading: false, - requestParams: undefined, - requestURL: undefined, - summary: undefined, -}; - /** * File manifest state. */ @@ -86,7 +66,7 @@ export const FileManifestStateContext = createContext({ // eslint-disable-next-line @typescript-eslint/no-empty-function -- allow dummy function for default state. fileManifestDispatch: () => {}, - fileManifestState: DEFAULT_FILE_MANIFEST_STATE, + fileManifestState: FILE_MANIFEST_STATE, }); export interface FileManifestStateProps { @@ -106,7 +86,7 @@ export function FileManifestStateProvider({ const [fileManifestState, fileManifestDispatch] = useReducer( (s: FileManifestState, a: FileManifestAction) => fileManifestReducer(s, a, { URL, catalog }), - DEFAULT_FILE_MANIFEST_STATE + FILE_MANIFEST_STATE ); const { fileSummaryFacetName, fileSummaryFilters, filters, isEnabled } = diff --git a/src/providers/fileManifestState/constants.ts b/src/providers/fileManifestState/constants.ts index 921d225e..e568b0b1 100644 --- a/src/providers/fileManifestState/constants.ts +++ b/src/providers/fileManifestState/constants.ts @@ -1,7 +1,31 @@ -import { FILE_MANIFEST_TYPE } from "../../hooks/useFileManifest/common/entities"; +import { + FILE_MANIFEST_TYPE, + FILES_FACETS_STATUS, +} from "../../hooks/useFileManifest/common/entities"; +import { FileManifestState } from "../fileManifestState"; export const ENTITIES_FILE_MANIFEST_TYPES: FILE_MANIFEST_TYPE[] = [ FILE_MANIFEST_TYPE.BULK_DOWNLOAD, FILE_MANIFEST_TYPE.DOWNLOAD_MANIFEST, FILE_MANIFEST_TYPE.EXPORT_TO_TERRA, ]; + +export const FILE_MANIFEST_STATE: FileManifestState = { + fileManifestFormat: undefined, + fileManifestType: undefined, + fileSummary: undefined, + fileSummaryFacetName: undefined, + fileSummaryFilters: [], + filesFacets: [], + filesFacetsStatus: FILES_FACETS_STATUS.NOT_STARTED, + filters: [], + isEnabled: false, + isFacetsLoading: false, + isFacetsSuccess: false, + isFileSummaryLoading: false, + isLoading: false, + isSummaryLoading: false, + requestParams: undefined, + requestURL: undefined, + summary: undefined, +}; diff --git a/tests/updateFilesFacetsStatus.test.ts b/tests/updateFilesFacetsStatus.test.ts new file mode 100644 index 00000000..24174bcb --- /dev/null +++ b/tests/updateFilesFacetsStatus.test.ts @@ -0,0 +1,84 @@ +import { FILES_FACETS_STATUS } from "../src/hooks/useFileManifest/common/entities"; +import { + FileManifestState, + UpdateFileManifestPayload, +} from "../src/providers/fileManifestState"; +import { FILE_MANIFEST_STATE } from "../src/providers/fileManifestState/constants"; +import { updateFilesFacetsStatus } from "../src/providers/fileManifestState/utils"; + +const FILE_MANIFEST_STATE_NOT_STARTED: FileManifestState = { + ...FILE_MANIFEST_STATE, + filesFacetsStatus: FILES_FACETS_STATUS.NOT_STARTED, +}; + +const FILE_MANIFEST_STATE_IN_PROGRESS: FileManifestState = { + ...FILE_MANIFEST_STATE, + filesFacetsStatus: FILES_FACETS_STATUS.IN_PROGRESS, +}; + +const FILE_MANIFEST_STATE_COMPLETED: FileManifestState = { + ...FILE_MANIFEST_STATE, + filesFacetsStatus: FILES_FACETS_STATUS.COMPLETED, +}; + +const UPDATE_FILE_MANIFEST_PAYLOAD_IDLE = { + isFacetsLoading: false, + isFacetsSuccess: false, +} as UpdateFileManifestPayload; + +const UPDATE_FILE_MANIFEST_PAYLOAD_LOADING = { + isFacetsLoading: true, + isFacetsSuccess: false, +} as UpdateFileManifestPayload; + +const UPDATE_FILE_MANIFEST_PAYLOAD_SUCCESS = { + isFacetsLoading: false, + isFacetsSuccess: true, +} as UpdateFileManifestPayload; + +describe("updateFilesFacetsStatus", () => { + test("files facets NOT_STARTED, request is IDLE", () => { + expect( + updateFilesFacetsStatus( + FILE_MANIFEST_STATE_NOT_STARTED, + UPDATE_FILE_MANIFEST_PAYLOAD_IDLE + ) + ).toBe(FILES_FACETS_STATUS.NOT_STARTED); + }); + + test("files facets NOT_STARTED, request is LOADING", () => { + expect( + updateFilesFacetsStatus( + FILE_MANIFEST_STATE_NOT_STARTED, + UPDATE_FILE_MANIFEST_PAYLOAD_LOADING + ) + ).toBe(FILES_FACETS_STATUS.IN_PROGRESS); + }); + + test("files facets IN_PROGRESS, request is LOADING", () => { + expect( + updateFilesFacetsStatus( + FILE_MANIFEST_STATE_IN_PROGRESS, + UPDATE_FILE_MANIFEST_PAYLOAD_LOADING + ) + ).toBe(FILES_FACETS_STATUS.IN_PROGRESS); + }); + + test("files facets IN_PROGRESS, request is SUCCESS", () => { + expect( + updateFilesFacetsStatus( + FILE_MANIFEST_STATE_IN_PROGRESS, + UPDATE_FILE_MANIFEST_PAYLOAD_SUCCESS + ) + ).toBe(FILES_FACETS_STATUS.COMPLETED); + }); + + test("files facets COMPLETED, request is SUCCESS", () => { + expect( + updateFilesFacetsStatus( + FILE_MANIFEST_STATE_COMPLETED, + UPDATE_FILE_MANIFEST_PAYLOAD_SUCCESS + ) + ).toBe(FILES_FACETS_STATUS.COMPLETED); + }); +});