Skip to content

Commit f4690d1

Browse files
committed
Update unit tests
1 parent c32fda9 commit f4690d1

1 file changed

Lines changed: 56 additions & 6 deletions

File tree

packages/ui/src/components/ConfigureSSO/steps/__tests__/SelectProviderStep.test.tsx

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { ClerkRuntimeError } from '@clerk/shared/error';
12
import type { ReactElement } from 'react';
23
import { describe, expect, it, vi } from 'vitest';
34

@@ -7,6 +8,7 @@ import { CardStateProvider } from '@/ui/elements/contexts';
78

89
const goNext = vi.fn();
910
const goPrev = vi.fn();
11+
const goToStep = vi.fn();
1012

1113
vi.mock('../../elements/Wizard', () => ({
1214
useWizard: () => ({
@@ -19,23 +21,42 @@ vi.mock('../../elements/Wizard', () => ({
1921
isNested: false,
2022
goNext,
2123
goPrev,
22-
goToStep: vi.fn(),
24+
goToStep,
2325
registerStep: vi.fn(),
2426
unregisterStep: vi.fn(),
2527
}),
2628
}));
2729

2830
const setProvider = vi.fn();
31+
const createEnterpriseConnection = vi.fn();
2932

3033
vi.mock('../../ConfigureSSOContext', () => ({
3134
useConfigureSSO: () => ({
3235
enterpriseConnection: undefined,
3336
provider: undefined,
3437
setProvider,
38+
createEnterpriseConnection,
3539
initialStepId: 'select-provider',
3640
}),
3741
}));
3842

43+
vi.mock('@clerk/shared/react/index', async importOriginal => {
44+
const actual = await importOriginal<typeof import('@clerk/shared/react/index')>();
45+
return {
46+
...actual,
47+
useUser: () => ({
48+
user: {
49+
primaryEmailAddress: {
50+
emailAddress: 'test@clerk.com',
51+
verification: { status: 'verified' },
52+
},
53+
},
54+
isLoaded: true,
55+
isSignedIn: true,
56+
}),
57+
};
58+
});
59+
3960
import { SelectProviderStep } from '../SelectProviderStep';
4061

4162
const { createFixtures } = bindCreateFixtures('ConfigureSSO');
@@ -50,7 +71,10 @@ const renderStep = (
5071
const resetMocks = () => {
5172
goNext.mockReset();
5273
goPrev.mockReset();
74+
goToStep.mockReset();
5375
setProvider.mockReset();
76+
createEnterpriseConnection.mockReset();
77+
createEnterpriseConnection.mockResolvedValue(undefined);
5478
};
5579

5680
describe('SelectProviderStep', () => {
@@ -137,8 +161,11 @@ describe('SelectProviderStep', () => {
137161
setProvider.mockImplementation(() => {
138162
callOrder.push('setProvider');
139163
});
140-
goNext.mockImplementation(() => {
141-
callOrder.push('goNext');
164+
createEnterpriseConnection.mockImplementation(async () => {
165+
callOrder.push('createEnterpriseConnection');
166+
});
167+
goToStep.mockImplementation(() => {
168+
callOrder.push('goToStep');
142169
});
143170

144171
const { wrapper } = await createFixtures();
@@ -148,11 +175,12 @@ describe('SelectProviderStep', () => {
148175
await userEvent.click(screen.getByRole('button', { name: /Continue/i }));
149176

150177
await waitFor(() => {
151-
expect(goNext).toHaveBeenCalledTimes(1);
178+
expect(goToStep).toHaveBeenCalledWith('configure');
152179
});
153180

154181
expect(setProvider).toHaveBeenCalledWith('saml_okta');
155-
expect(callOrder).toEqual(['setProvider', 'goNext']);
182+
expect(createEnterpriseConnection).toHaveBeenCalledWith('saml_okta');
183+
expect(callOrder).toEqual(['setProvider', 'createEnterpriseConnection', 'goToStep']);
156184
});
157185

158186
it('forwards the Custom SAML backend provider id when selected', async () => {
@@ -164,10 +192,32 @@ describe('SelectProviderStep', () => {
164192
await userEvent.click(screen.getByRole('button', { name: /Continue/i }));
165193

166194
await waitFor(() => {
167-
expect(goNext).toHaveBeenCalledTimes(1);
195+
expect(goToStep).toHaveBeenCalledWith('configure');
168196
});
169197

170198
expect(setProvider).toHaveBeenCalledWith('saml_custom');
199+
expect(createEnterpriseConnection).toHaveBeenCalledWith('saml_custom');
200+
});
201+
202+
it('does not advance when failing to create enterprise connection', async () => {
203+
resetMocks();
204+
createEnterpriseConnection.mockRejectedValue(
205+
new ClerkRuntimeError('failed to create enterprise connection', {
206+
code: 'enterprise_connection_creation_failed',
207+
}),
208+
);
209+
210+
const { wrapper } = await createFixtures();
211+
const { userEvent } = renderStep(wrapper);
212+
213+
await userEvent.click(screen.getByRole('radio', { name: 'Okta Workforce' }));
214+
await userEvent.click(screen.getByRole('button', { name: /Continue/i }));
215+
216+
await waitFor(() => {
217+
expect(createEnterpriseConnection).toHaveBeenCalledWith('saml_okta');
218+
});
219+
220+
expect(goToStep).not.toHaveBeenCalled();
171221
});
172222

173223
it('disables Previous on the first step', async () => {

0 commit comments

Comments
 (0)