From 16b74e6445fafa05ba623e36266f9855a54f9888 Mon Sep 17 00:00:00 2001 From: renjithabby Date: Mon, 3 Aug 2026 12:23:14 +0100 Subject: [PATCH] removed the featuregroup2 restriction for disconnectSharedDrive and transferMaterialV1 features --- .../hooks/useUserGroupsFeatureFlag.test.tsx | 141 ++++++++++++------ .../common/hooks/useUserGroupsFeatureFlag.ts | 8 - 2 files changed, 99 insertions(+), 50 deletions(-) diff --git a/ui-spa/src/common/hooks/useUserGroupsFeatureFlag.test.tsx b/ui-spa/src/common/hooks/useUserGroupsFeatureFlag.test.tsx index 3b6535a34..a09bad01a 100644 --- a/ui-spa/src/common/hooks/useUserGroupsFeatureFlag.test.tsx +++ b/ui-spa/src/common/hooks/useUserGroupsFeatureFlag.test.tsx @@ -31,6 +31,7 @@ const mockConfig = configModule as { FEATURE_FLAG_DISCONNECT_SHARED_DRIVE: boolean; PRIVATE_BETA_FEATURE_USER_GROUP2: string; FEATURE_FLAG_MAINTENANCE_MODE: boolean; + FEATURE_FLAG_TRANSFER_MATERIALS_V1: boolean; }; describe("useUserGroupsFeatureFlag", () => { @@ -348,19 +349,18 @@ describe("useUserGroupsFeatureFlag", () => { }); describe("disconnect shared drive flag", () => { - test("Should return disconnectSharedDrive feature false, if FEATURE_FLAG_DISCONNECT_SHARED_DRIVE is false for normal user", () => { + test("Should return disconnectSharedDrive feature false, if FEATURE_FLAG_DISCONNECT_SHARED_DRIVE is false for normal user and there is no token group restriction", () => { (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ { username: "test_username", name: "test_name", idTokenClaims: { - groups: ["private_beta_feature_group2"], + groups: [], }, }, ]); mockConfig.FEATURE_FLAG_DISCONNECT_SHARED_DRIVE = false; - mockConfig.PRIVATE_BETA_FEATURE_USER_GROUP2 = - "private_beta_feature_group2"; + const { result } = renderHook(() => useUserGroupsFeatureFlag()); expect(result?.current?.disconnectSharedDrive).toStrictEqual(false); }); @@ -373,17 +373,20 @@ describe("useUserGroupsFeatureFlag", () => { username: "dev_user@example.org", name: "dev_user", idTokenClaims: { - groups: ["private_beta_feature_group2"], + groups: [], }, }, ]); mockConfig.FEATURE_FLAG_DISCONNECT_SHARED_DRIVE = false; - mockConfig.PRIVATE_BETA_FEATURE_USER_GROUP2 = - "private_beta_feature_group2"; + const { result } = renderHook(() => useUserGroupsFeatureFlag()); expect(result?.current?.disconnectSharedDrive).toStrictEqual(false); }); - test("Should return disconnectSharedDrive feature false, if FEATURE_FLAG_DISCONNECT_SHARED_DRIVE is true and the user is not added to PRIVATE_BETA_FEATURE_USER_GROUP2 for normal user", () => { + + test("Should return disconnectSharedDrive feature true, if FEATURE_FLAG_DISCONNECT_SHARED_DRIVE is true for automation user", () => { + (auth.useUserDetails as Mock).mockReturnValue({ + username: "dev_user@example.org", + }); (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ { username: "test_username", @@ -394,31 +397,41 @@ describe("useUserGroupsFeatureFlag", () => { }, ]); mockConfig.FEATURE_FLAG_DISCONNECT_SHARED_DRIVE = true; - mockConfig.PRIVATE_BETA_FEATURE_USER_GROUP2 = - "private_beta_feature_group2"; + const { result } = renderHook(() => useUserGroupsFeatureFlag()); - expect(result?.current?.disconnectSharedDrive).toStrictEqual(false); + expect(result?.current?.disconnectSharedDrive).toStrictEqual(true); }); - test("Should return disconnectSharedDrive feature true, if FEATURE_FLAG_DISCONNECT_SHARED_DRIVE is true and the user is added to PRIVATE_BETA_FEATURE_USER_GROUP2 for normal user", () => { + test("Should return disconnectSharedDrive feature true, if it is an automation user with search param disconnect-shared-drive=true, search param take priority for automation user", () => { + (auth.useUserDetails as Mock).mockReturnValue({ + username: "dev_user@example.org", + }); + (router.useSearchParams as Mock).mockReturnValue([ + new URLSearchParams("disconnect-shared-drive=true"), + vi.fn(), + ]); + (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ { username: "test_username", name: "test_name", idTokenClaims: { - groups: ["private_beta_feature_group2"], + groups: ["private_beta_feature_group1"], }, }, ]); - mockConfig.FEATURE_FLAG_DISCONNECT_SHARED_DRIVE = true; - mockConfig.PRIVATE_BETA_FEATURE_USER_GROUP2 = - "private_beta_feature_group2"; + mockConfig.FEATURE_FLAG_DISCONNECT_SHARED_DRIVE = false; const { result } = renderHook(() => useUserGroupsFeatureFlag()); expect(result?.current?.disconnectSharedDrive).toStrictEqual(true); }); - test("Should return disconnectSharedDrive feature true, if FEATURE_FLAG_DISCONNECT_SHARED_DRIVE is true even if the user is not added to PRIVATE_BETA_FEATURE_USER_GROUP2 for automation user", () => { + test("Should return disconnectSharedDrive feature false, if it is an automation user with search param disconnect-shared-drive=false,search param take priority for automation user", () => { (auth.useUserDetails as Mock).mockReturnValue({ username: "dev_user@example.org", }); + (router.useSearchParams as Mock).mockReturnValue([ + new URLSearchParams("disconnect-shared-drive=false"), + vi.fn(), + ]); + (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ { username: "test_username", @@ -429,17 +442,68 @@ describe("useUserGroupsFeatureFlag", () => { }, ]); mockConfig.FEATURE_FLAG_DISCONNECT_SHARED_DRIVE = true; - mockConfig.PRIVATE_BETA_FEATURE_USER_GROUP2 = - "private_beta_feature_group2"; const { result } = renderHook(() => useUserGroupsFeatureFlag()); - expect(result?.current?.disconnectSharedDrive).toStrictEqual(true); + expect(result?.current?.disconnectSharedDrive).toStrictEqual(false); }); - test("Should return disconnectSharedDrive feature true, if it is an automation user with search param disconnect-shared-drive=true, search param take priority for automation user", () => { + }); + + describe("transferMaterialsV1 flag", () => { + test("Should return transferMaterialsV1 feature false, if FEATURE_FLAG_TRANSFER_MATERIALS_V1 is false for normal user, and there is no token group restriction", () => { + (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ + { + username: "test_username", + name: "test_name", + idTokenClaims: { + groups: [], + }, + }, + ]); + mockConfig.FEATURE_FLAG_TRANSFER_MATERIALS_V1 = false; + + const { result } = renderHook(() => useUserGroupsFeatureFlag()); + expect(result?.current?.transferMaterialsV1).toStrictEqual(false); + }); + test("Should return transferMaterialsV1 feature false, if FEATURE_FLAG_TRANSFER_MATERIALS_V1 is false for automation test user ", () => { + (auth.useUserDetails as Mock).mockReturnValue({ + username: "dev_user@example.org", + }); + (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ + { + username: "dev_user@example.org", + name: "dev_user", + idTokenClaims: { + groups: [], + }, + }, + ]); + mockConfig.FEATURE_FLAG_TRANSFER_MATERIALS_V1 = false; + + const { result } = renderHook(() => useUserGroupsFeatureFlag()); + expect(result?.current?.transferMaterialsV1).toStrictEqual(false); + }); + test("Should return transferMaterialsV1 feature true, if FEATURE_FLAG_TRANSFER_MATERIALS_V1 is true for automation user", () => { + (auth.useUserDetails as Mock).mockReturnValue({ + username: "dev_user@example.org", + }); + (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ + { + username: "test_username", + name: "test_name", + idTokenClaims: { + groups: ["private_beta_feature_group1"], + }, + }, + ]); + mockConfig.FEATURE_FLAG_TRANSFER_MATERIALS_V1 = true; + const { result } = renderHook(() => useUserGroupsFeatureFlag()); + expect(result?.current?.transferMaterialsV1).toStrictEqual(true); + }); + test("Should return transferMaterialsV1 feature true, if it is an automation user with search param transfer-materials-v1=true, search param take priority for automation user", () => { (auth.useUserDetails as Mock).mockReturnValue({ username: "dev_user@example.org", }); (router.useSearchParams as Mock).mockReturnValue([ - new URLSearchParams("disconnect-shared-drive=true"), + new URLSearchParams("transfer-materials-v1=true"), vi.fn(), ]); @@ -448,22 +512,21 @@ describe("useUserGroupsFeatureFlag", () => { username: "test_username", name: "test_name", idTokenClaims: { - groups: ["private_beta_feature_group1"], + groups: [], }, }, ]); - mockConfig.FEATURE_FLAG_DISCONNECT_SHARED_DRIVE = false; - mockConfig.PRIVATE_BETA_FEATURE_USER_GROUP2 = - "private_beta_feature_group2"; + mockConfig.FEATURE_FLAG_TRANSFER_MATERIALS_V1 = false; + const { result } = renderHook(() => useUserGroupsFeatureFlag()); - expect(result?.current?.disconnectSharedDrive).toStrictEqual(true); + expect(result?.current?.transferMaterialsV1).toStrictEqual(true); }); - test("Should return disconnectSharedDrive feature false, if it is an automation user with search param disconnect-shared-drive=false,search param take priority for automation user", () => { + test("Should return transferMaterialsV1 feature false, if it is an automation user with search param transfer-materials-v1=false,search param take priority for automation user", () => { (auth.useUserDetails as Mock).mockReturnValue({ username: "dev_user@example.org", }); (router.useSearchParams as Mock).mockReturnValue([ - new URLSearchParams("disconnect-shared-drive=false"), + new URLSearchParams("transfer-materials-v1=false"), vi.fn(), ]); @@ -472,25 +535,22 @@ describe("useUserGroupsFeatureFlag", () => { username: "test_username", name: "test_name", idTokenClaims: { - groups: ["private_beta_feature_group1"], + groups: [], }, }, ]); - mockConfig.FEATURE_FLAG_DISCONNECT_SHARED_DRIVE = true; - mockConfig.PRIVATE_BETA_FEATURE_USER_GROUP2 = - "private_beta_feature_group2"; + mockConfig.FEATURE_FLAG_TRANSFER_MATERIALS_V1 = true; const { result } = renderHook(() => useUserGroupsFeatureFlag()); - expect(result?.current?.disconnectSharedDrive).toStrictEqual(false); + expect(result?.current?.transferMaterialsV1).toStrictEqual(false); }); }); - describe("maintenance mode feature flag", () => { + describe("maintenance mode feature flag", () => { test("Should return maintenanceMode feature false, if FEATURE_FLAG_MAINTENANCE_MODE is false for normal user", () => { (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ { username: "test_username", name: "test_name", - }, ]); mockConfig.FEATURE_FLAG_MAINTENANCE_MODE = false; @@ -506,7 +566,6 @@ describe("useUserGroupsFeatureFlag", () => { { username: "dev_user@example.org", name: "dev_user", - }, ]); mockConfig.FEATURE_FLAG_MAINTENANCE_MODE = false; @@ -522,16 +581,15 @@ describe("useUserGroupsFeatureFlag", () => { new URLSearchParams("maintenance-mode=true"), vi.fn(), ]); - (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ + (msalInstanceModule.msalInstance.getAllAccounts as Mock).mockReturnValue([ { username: "dev_user@example.org", name: "dev_user", - }, ]); mockConfig.FEATURE_FLAG_MAINTENANCE_MODE = false; - + const { result } = renderHook(() => useUserGroupsFeatureFlag()); expect(result?.current?.maintenanceMode).toStrictEqual(true); }); @@ -548,11 +606,10 @@ describe("useUserGroupsFeatureFlag", () => { { username: "dev_user@example.org", name: "dev_user", - }, ]); mockConfig.FEATURE_FLAG_MAINTENANCE_MODE = true; - + const { result } = renderHook(() => useUserGroupsFeatureFlag()); expect(result?.current?.maintenanceMode).toStrictEqual(false); }); diff --git a/ui-spa/src/common/hooks/useUserGroupsFeatureFlag.ts b/ui-spa/src/common/hooks/useUserGroupsFeatureFlag.ts index 10fb88895..4af0122a0 100644 --- a/ui-spa/src/common/hooks/useUserGroupsFeatureFlag.ts +++ b/ui-spa/src/common/hooks/useUserGroupsFeatureFlag.ts @@ -83,19 +83,11 @@ export const useUserGroupsFeatureFlag = (): FeatureFlagData | null => { userDetails.username, FEATURE_FLAG_DISCONNECT_SHARED_DRIVE, searchParams?.get("disconnect-shared-drive"), - { - groups: groups, - groupKey: PRIVATE_BETA_FEATURE_USER_GROUP2, - }, ), transferMaterialsV1: shouldShowFeature( userDetails.username, FEATURE_FLAG_TRANSFER_MATERIALS_V1, searchParams?.get("transfer-materials-v1"), - { - groups: groups, - groupKey: PRIVATE_BETA_FEATURE_USER_GROUP2, - }, ), maintenanceMode: shouldShowFeature( userDetails.username,