diff --git a/src/madie-madie-util.tsx b/src/madie-madie-util.tsx index efd5fee..c2ba49c 100644 --- a/src/madie-madie-util.tsx +++ b/src/madie-madie-util.tsx @@ -17,6 +17,7 @@ import { default as useTerminologyServiceApi } from "./api/useTerminologyService import { default as useOrganizationApi } from "./api/useOrganizationApi"; import { useDocumentTitle } from "./hooks/useDocumentTitle"; import { default as checkUserCanEdit } from "./util/useCheckCanEdit"; +import { default as checkUserCanDelete } from "./util/useCheckCanDelete"; import { useFeatureFlags } from "./hooks/useFeatureFlags"; import { getOidFromString } from "./util/terminologyUtils"; @@ -33,6 +34,7 @@ export { useOrganizationApi, useDocumentTitle, checkUserCanEdit, + checkUserCanDelete, useFeatureFlags, getOidFromString, }; diff --git a/src/util/useCheckCanDelete.test.ts b/src/util/useCheckCanDelete.test.ts new file mode 100644 index 0000000..96614aa --- /dev/null +++ b/src/util/useCheckCanDelete.test.ts @@ -0,0 +1,75 @@ +import * as React from "react"; +import useOktaTokens from "../hooks/useOktaTokens"; +import useCheckUserCanDelete from "./useCheckCanDelete"; + +const JANE_DOE = "Jane doe"; +const JOHN_DOE = "john doe"; + +jest.mock("../hooks/useOktaTokens", () => + jest.fn(() => ({ + getUserName: jest.fn(), + })) +); + +describe("Check user canEdit", () => { + beforeEach(() => { + jest.resetAllMocks(); + (useOktaTokens as jest.Mock).mockImplementation(() => ({ + getUserName: () => JANE_DOE, + })); + }); + + it("should return true when user name and createdBy are the same", () => { + const canEdit = useCheckUserCanDelete(JANE_DOE, true); + expect(canEdit).toBeTruthy(); + }); + + it("should return true when user name and createdBy are the same", () => { + const canEdit = useCheckUserCanDelete(JANE_DOE, true); + expect(canEdit).toBeTruthy(); + }); + + it("should return false when user name and createdBy are same but it is not draft", () => { + const canEdit = useCheckUserCanDelete(JANE_DOE, false); + expect(canEdit).not.toBeTruthy(); + }); + + // it("should return undefined when user name and createdBy are not the same", () => { + // const canEdit = useCheckUserCanEdit("anotherU$er", true); + // expect(canEdit).not.toBeTruthy(); + // }); + + // it("should return true when measure is shared with the same user", () => { + // const canEdit = useCheckUserCanEdit( + // "anotherU$er", // nosec + // [{ userId: JANE_DOE, roles: ["SHARED_WITH"] }], + // true + // ); + // expect(canEdit).toBeTruthy(); + // }); + + // it("should return true when measure is shared with the same user with no version status supplied", () => { + // const canEdit = useCheckUserCanEdit("anotherU$er", [ + // { userId: JANE_DOE, roles: ["SHARED_WITH"] }, + // ]); + // expect(canEdit).toBeTruthy(); + // }); + + // it("should return undefined when measure is shared with a different user", () => { + // const canEdit = useCheckUserCanEdit( + // "anotherU$er", + // [{ userId: JOHN_DOE, roles: ["SHARED_WITH"] }], + // true + // ); + // expect(canEdit).not.toBeTruthy(); + // }); + + // it("should return false when measure is versioned greater than 0", () => { + // const canEdit = useCheckUserCanEdit( + // "anotherU$er", + // [{ userId: JOHN_DOE, roles: ["SHARED_WITH"] }], + // false + // ); + // expect(canEdit).not.toBeTruthy(); + // }); +}); diff --git a/src/util/useCheckCanDelete.ts b/src/util/useCheckCanDelete.ts new file mode 100644 index 0000000..d620cb8 --- /dev/null +++ b/src/util/useCheckCanDelete.ts @@ -0,0 +1,17 @@ +import useOktaTokens from "../hooks/useOktaTokens"; + +const useCheckUserCanDelete = ( + createdBy: string, + draft: boolean = true +): boolean => { + const { getUserName } = useOktaTokens(); + const userName = getUserName(); + // versioned measures/libraries can never be deleted . + if (!draft) { + return false; + } + + return createdBy?.toLowerCase() === userName?.toLowerCase(); +}; + +export default useCheckUserCanDelete; diff --git a/src/util/useCheckCanEdit.ts b/src/util/useCheckCanEdit.ts index be3de9d..b754d63 100644 --- a/src/util/useCheckCanEdit.ts +++ b/src/util/useCheckCanEdit.ts @@ -8,7 +8,7 @@ const useCheckUserCanEdit = ( ): boolean => { const { getUserName } = useOktaTokens(); const userName = getUserName(); - // versioned measures are always uneditable. + // versioned measures/libraries are always uneditable. if (!draft) { return false; }