Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 99 additions & 42 deletions ui-spa/src/common/hooks/useUserGroupsFeatureFlag.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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", () => {
Expand Down Expand Up @@ -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);
});
Expand All @@ -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",
Expand All @@ -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",
Expand All @@ -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(),
]);

Expand All @@ -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(),
]);

Expand All @@ -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;
Expand All @@ -506,7 +566,6 @@ describe("useUserGroupsFeatureFlag", () => {
{
username: "dev_user@example.org",
name: "dev_user",

},
]);
mockConfig.FEATURE_FLAG_MAINTENANCE_MODE = false;
Expand All @@ -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);
});
Expand All @@ -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);
});
Expand Down
8 changes: 0 additions & 8 deletions ui-spa/src/common/hooks/useUserGroupsFeatureFlag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Loading