From 0b656db80aabeacb6b3f904722af5c61bcf7cf47 Mon Sep 17 00:00:00 2001 From: Mateusz Kwasniewski Date: Fri, 6 Sep 2024 11:50:52 +0200 Subject: [PATCH] test: onboarding test with existing key (#8116) --- .../component/onboarding/ConnectSdkDialog.tsx | 4 +- .../component/onboarding/Onboarding.test.tsx | 68 +++++++++++++++++++ .../src/component/onboarding/SelectSdk.tsx | 2 +- .../hooks/useDefaultColumnVisibility.test.tsx | 21 +----- frontend/src/utils/resizeScreen.ts | 20 ++++++ 5 files changed, 91 insertions(+), 24 deletions(-) create mode 100644 frontend/src/component/onboarding/Onboarding.test.tsx create mode 100644 frontend/src/utils/resizeScreen.ts diff --git a/frontend/src/component/onboarding/ConnectSdkDialog.tsx b/frontend/src/component/onboarding/ConnectSdkDialog.tsx index 5d0c5b79f2..6a5db44c2f 100644 --- a/frontend/src/component/onboarding/ConnectSdkDialog.tsx +++ b/frontend/src/component/onboarding/ConnectSdkDialog.tsx @@ -107,9 +107,7 @@ export const ConnectSdkDialog = ({ project={project} sdkType={sdk.type} onEnvSelect={setEnvironment} - onApiKey={(apiKey) => { - setApiKey(apiKey); - }} + onApiKey={setApiKey} /> ) : null} {isTestConnectionStage ? ( diff --git a/frontend/src/component/onboarding/Onboarding.test.tsx b/frontend/src/component/onboarding/Onboarding.test.tsx new file mode 100644 index 0000000000..1ad2ba75d4 --- /dev/null +++ b/frontend/src/component/onboarding/Onboarding.test.tsx @@ -0,0 +1,68 @@ +import { render } from 'utils/testRenderer'; +import { ConnectSdkDialog } from './ConnectSdkDialog'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; +import { testServerRoute, testServerSetup } from 'utils/testServer'; +import { resizeScreen } from 'utils/resizeScreen'; + +const server = testServerSetup(); + +const setupApi = () => { + testServerRoute(server, '/api/admin/projects/default/api-tokens', { + tokens: [ + { + environment: 'development', + type: 'client', + secret: 'default:development.5c4150866d', + }, + ], + }); + + testServerRoute(server, '/api/admin/ui-config', { + versionInfo: { + current: { oss: 'irrelevant', enterprise: 'some value' }, + }, + }); +}; + +test('Onboarding for SDK with existing key', async () => { + setupApi(); + // on smaller screens we don't show concepts definitions + resizeScreen(2000); + + render( + {}} + open={true} + environments={['development', 'productions']} + feature='featureA' + />, + ); + + screen.getByText('1/3 - Choose SDK'); + screen.getByText('Select SDK'); + screen.getByText('SDKs and Unleash'); + + const node = screen.getAllByText('Select')[0]; + + fireEvent.click(node); + + screen.getByText('2/3 - Generate API Key'); + screen.getByText('API Key'); + screen.getByText('Flags live in projects'); + screen.getByText('development'); + + await screen.findByText('The API key secret'); + await screen.findByText('5c4150866d'); + + const next = screen.getByText('Next'); + + await waitFor(() => { + expect(next).toBeEnabled(); + }); + + fireEvent.click(next); + + await screen.findByText('npm install unleash-client'); + await screen.findByText('Connection status'); +}); diff --git a/frontend/src/component/onboarding/SelectSdk.tsx b/frontend/src/component/onboarding/SelectSdk.tsx index 27a44e5724..533a0793a6 100644 --- a/frontend/src/component/onboarding/SelectSdk.tsx +++ b/frontend/src/component/onboarding/SelectSdk.tsx @@ -73,7 +73,7 @@ export const SelectSdk: FC = ({ onSelect }) => { {serverSdks.map((sdk) => ( - + {sdk.name}{' '} diff --git a/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/hooks/useDefaultColumnVisibility.test.tsx b/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/hooks/useDefaultColumnVisibility.test.tsx index 60ebd704fb..f7a9d12c7c 100644 --- a/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/hooks/useDefaultColumnVisibility.test.tsx +++ b/frontend/src/component/project/Project/PaginatedProjectFeatureToggles/hooks/useDefaultColumnVisibility.test.tsx @@ -3,26 +3,7 @@ import { screen } from '@testing-library/react'; import { useDefaultColumnVisibility } from './useDefaultColumnVisibility'; import { render } from 'utils/testRenderer'; import { ThemeProvider } from 'themes/ThemeProvider'; -import mediaQuery from 'css-mediaquery'; - -const createMatchMedia = (width: number) => { - return (query: string) => { - return { - matches: mediaQuery.match(query, { width }), - media: '', - addListener: () => {}, - removeListener: () => {}, - onchange: () => {}, - addEventListener: () => {}, - removeEventListener: () => {}, - dispatchEvent: () => true, - }; - }; -}; - -const resizeScreen = (width: number) => { - window.matchMedia = createMatchMedia(width); -}; +import { resizeScreen } from 'utils/resizeScreen'; const columnIds = [ 'select', diff --git a/frontend/src/utils/resizeScreen.ts b/frontend/src/utils/resizeScreen.ts new file mode 100644 index 0000000000..90f18880c6 --- /dev/null +++ b/frontend/src/utils/resizeScreen.ts @@ -0,0 +1,20 @@ +import mediaQuery from 'css-mediaquery'; + +const createMatchMedia = (width: number) => { + return (query: string) => { + return { + matches: mediaQuery.match(query, { width }), + media: '', + addListener: () => {}, + removeListener: () => {}, + onchange: () => {}, + addEventListener: () => {}, + removeEventListener: () => {}, + dispatchEvent: () => true, + }; + }; +}; + +export const resizeScreen = (width: number) => { + window.matchMedia = createMatchMedia(width); +};