From 1ecc8401e69ba3276d0233a8db9232c3387ab48d Mon Sep 17 00:00:00 2001 From: brayn003 Date: Tue, 2 Apr 2024 14:13:34 +0530 Subject: [PATCH 1/3] fix: adding test cases --- .../src/ce/hooks/useShowEnvSwitcher.test.tsx | 306 ++++++++++++++++++ app/client/src/ce/hooks/useShowEnvSwitcher.ts | 1 + 2 files changed, 307 insertions(+) create mode 100644 app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx diff --git a/app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx b/app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx new file mode 100644 index 00000000000..548a042d456 --- /dev/null +++ b/app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx @@ -0,0 +1,306 @@ +import React from "react"; +import { render } from "@testing-library/react"; +import { Provider } from "react-redux"; +import configureMockStore from "redux-mock-store"; +// import type { AppState } from "@appsmith/reducers"; +import useShowEnvSwitcher from "./useShowEnvSwitcher"; + +const spier = { + useShowEnvSwitcher: useShowEnvSwitcher, +}; + +const useShowEnvSwitcherSpy = jest.spyOn(spier, "useShowEnvSwitcher"); + +const MockEl = ({ viewMode = false }: { viewMode?: boolean } = {}) => { + spier.useShowEnvSwitcher({ viewMode }); + return
; +}; + +const renderMockElement = ({ + store, + viewMode, +}: { + store: any; + viewMode: boolean; +}) => { + return render( + + + , + ); +}; + +describe("BottomBar environment switcher", () => { + it("should render when admin in edit mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: ["manage:applications"], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: true, + }, + }, + editor: { + isPreviewMode: false, + }, + }, + }); + renderMockElement({ store, viewMode: false }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(true); + }); + it("should render when dev in edit mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: ["manage:applications"], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: false, + }, + }, + editor: { + isPreviewMode: false, + }, + }, + }); + renderMockElement({ store, viewMode: false }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(true); + }); + it("should render when viewer in edit mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: [], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: false, + }, + }, + editor: { + isPreviewMode: false, + }, + }, + }); + renderMockElement({ store, viewMode: false }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(false); + }); + + it("should render when admin in preview mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: ["manage:applications"], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: true, + }, + }, + editor: { + isPreviewMode: true, + }, + }, + }); + renderMockElement({ store, viewMode: false }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(false); + }); + it("should render when dev in preview mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: ["manage:applications"], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: false, + }, + }, + editor: { + isPreviewMode: true, + }, + }, + }); + renderMockElement({ store, viewMode: false }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(false); + }); + it("should render when viewer in preview mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: [], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: false, + }, + }, + editor: { + isPreviewMode: true, + }, + }, + }); + renderMockElement({ store, viewMode: false }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(false); + }); + + it("should render when admin in view mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: ["manage:applications"], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: true, + }, + }, + editor: { + isPreviewMode: false, + }, + }, + }); + renderMockElement({ store, viewMode: true }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(false); + }); + it("should render when dev in view mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: ["manage:applications"], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: false, + }, + }, + editor: { + isPreviewMode: false, + }, + }, + }); + renderMockElement({ store, viewMode: true }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(false); + }); + it("should render when viewer in view mode", () => { + const mockStore = configureMockStore(); + const store = mockStore({ + ui: { + selectedWorkspace: { + workspace: {}, + }, + applications: { + currentApplication: { + userPermissions: [], + }, + }, + users: { + featureFlag: { + data: { + release_datasource_environments_enabled: false, + }, + }, + currentUser: { + isSuperUser: false, + }, + }, + editor: { + isPreviewMode: false, + }, + }, + }); + renderMockElement({ store, viewMode: true }); + expect(useShowEnvSwitcherSpy).lastReturnedWith(false); + }); +}); diff --git a/app/client/src/ce/hooks/useShowEnvSwitcher.ts b/app/client/src/ce/hooks/useShowEnvSwitcher.ts index 449f4fc6437..4554af12831 100644 --- a/app/client/src/ce/hooks/useShowEnvSwitcher.ts +++ b/app/client/src/ce/hooks/useShowEnvSwitcher.ts @@ -30,6 +30,7 @@ const useShowEnvSwitcher = ({ viewMode }: { viewMode: boolean }) => { if (!isFeatureEnabled && !isRampAllowed) { return false; } + if (viewMode && isMultiEnvNotPresent) { return false; } From 5771d9107ea2f0cd7e901f766b946f21039a8631 Mon Sep 17 00:00:00 2001 From: brayn003 Date: Tue, 2 Apr 2024 14:15:30 +0530 Subject: [PATCH 2/3] fix: adding condition to disable env list if feature flag is disabled --- app/client/src/ce/hooks/useShowEnvSwitcher.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/client/src/ce/hooks/useShowEnvSwitcher.ts b/app/client/src/ce/hooks/useShowEnvSwitcher.ts index 4554af12831..cc3fa5669f2 100644 --- a/app/client/src/ce/hooks/useShowEnvSwitcher.ts +++ b/app/client/src/ce/hooks/useShowEnvSwitcher.ts @@ -20,13 +20,18 @@ const useShowEnvSwitcher = ({ viewMode }: { viewMode: boolean }) => { const isLoaded = areEnvironmentsFetched(state, workspace?.id); const list = getEnvironmentsWithPermission(state); const isDefault = list?.[0]?.isDefault; - return isLoaded && (list.length === 0 || (list.length === 1 && isDefault)); + if (!isFeatureEnabled) { + return true; + } else { + return ( + isLoaded && (list.length === 0 || (list.length === 1 && isDefault)) + ); + } }); const isRampAllowed = useSelector((state) => showProductRamps(RAMP_NAME.MULTIPLE_ENV, true)(state), ); - if (!isFeatureEnabled && !isRampAllowed) { return false; } From 20ae88502963ec88f686ef237d4892886189f088 Mon Sep 17 00:00:00 2001 From: brayn003 Date: Tue, 2 Apr 2024 14:20:03 +0530 Subject: [PATCH 3/3] fix: remove comment --- app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx b/app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx index 548a042d456..7746f94a5bb 100644 --- a/app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx +++ b/app/client/src/ce/hooks/useShowEnvSwitcher.test.tsx @@ -2,7 +2,6 @@ import React from "react"; import { render } from "@testing-library/react"; import { Provider } from "react-redux"; import configureMockStore from "redux-mock-store"; -// import type { AppState } from "@appsmith/reducers"; import useShowEnvSwitcher from "./useShowEnvSwitcher"; const spier = {