|
1 | | -import { createClerkClient as backendCreateClerkClient } from '@clerk/backend'; |
2 | | -import { withRetry } from './retryableClerkClient'; |
3 | | -import { createAppPageObject, createPageObjects, type EnhancedPage } from '@clerk/testing/playwright/unstable'; |
4 | | -import type { Browser, BrowserContext, Page } from '@playwright/test'; |
5 | | - |
6 | | -import type { Application } from '../models/application'; |
7 | | -import { createEmailService } from './emailService'; |
8 | | -import { createInvitationService } from './invitationsService'; |
9 | | -import { createOrganizationsService } from './organizationsService'; |
10 | 1 | import type { FakeAPIKey, FakeOrganization, FakeUser, FakeUserWithEmail } from './usersService'; |
11 | | -import { createUserService } from './usersService'; |
12 | | -import { createWaitlistService } from './waitlistService'; |
| 2 | +export type { CreateAppPageObjectArgs } from './createTestUtils'; |
| 3 | +export { createTestUtils } from './createTestUtils'; |
13 | 4 |
|
14 | 5 | export type { FakeAPIKey, FakeOrganization, FakeUser, FakeUserWithEmail }; |
15 | | -export type { FakeMachineNetwork, FakeOAuthApp } from './machineAuthService'; |
| 6 | +export type { FakeMachineNetwork, FakeOAuthApp, MachineAuthTestAdapter } from './machineAuthHelpers'; |
16 | 7 | export { |
17 | 8 | createFakeMachineNetwork, |
18 | 9 | createFakeOAuthApp, |
19 | 10 | createJwtM2MToken, |
20 | 11 | obtainOAuthAccessToken, |
21 | | -} from './machineAuthService'; |
22 | | - |
23 | | -const createClerkClient = (app: Application) => { |
24 | | - return backendCreateClerkClient({ |
25 | | - apiUrl: app.env.privateVariables.get('CLERK_API_URL'), |
26 | | - secretKey: app.env.privateVariables.get('CLERK_SECRET_KEY'), |
27 | | - publishableKey: app.env.publicVariables.get('CLERK_PUBLISHABLE_KEY'), |
28 | | - }); |
29 | | -}; |
30 | | - |
31 | | -export type CreateAppPageObjectArgs = { page: Page; context: BrowserContext; browser: Browser }; |
32 | | - |
33 | | -export const createTestUtils = < |
34 | | - Params extends { app: Application; useTestingToken?: boolean } & Partial<CreateAppPageObjectArgs>, |
35 | | - Services = typeof services, |
36 | | - PO = typeof pageObjects, |
37 | | - BH = typeof browserHelpers, |
38 | | - FullReturn = { services: Services; po: PO; tabs: BH; page: EnhancedPage; nextJsVersion: string }, |
39 | | - OnlyAppReturn = { services: Services }, |
40 | | ->( |
41 | | - params: Params, |
42 | | -): Params extends Partial<CreateAppPageObjectArgs> ? FullReturn : OnlyAppReturn => { |
43 | | - const { app, context, browser, useTestingToken = true } = params || {}; |
44 | | - |
45 | | - const clerkClient = withRetry(createClerkClient(app)); |
46 | | - const services = { |
47 | | - clerk: clerkClient, |
48 | | - email: createEmailService(), |
49 | | - users: createUserService(clerkClient), |
50 | | - invitations: createInvitationService(clerkClient), |
51 | | - organizations: createOrganizationsService(clerkClient), |
52 | | - waitlist: createWaitlistService(clerkClient), |
53 | | - }; |
54 | | - |
55 | | - if (!params.page) { |
56 | | - return { services } as any; |
57 | | - } |
58 | | - |
59 | | - const pageObjects = createPageObjects({ page: params.page, useTestingToken, baseURL: app.serverUrl }); |
60 | | - |
61 | | - const browserHelpers = { |
62 | | - runInNewTab: async ( |
63 | | - cb: (u: { services: Services; po: PO; page: EnhancedPage }, context: BrowserContext) => Promise<unknown>, |
64 | | - ) => { |
65 | | - const u = createTestUtils({ |
66 | | - app, |
67 | | - page: createAppPageObject({ page: await context.newPage(), useTestingToken }, { baseURL: app.serverUrl }), |
68 | | - }); |
69 | | - await cb(u as any, context); |
70 | | - return u; |
71 | | - }, |
72 | | - runInNewBrowser: async ( |
73 | | - cb: (u: { services: Services; po: PO; page: EnhancedPage }, context: BrowserContext) => Promise<unknown>, |
74 | | - ) => { |
75 | | - if (!browser) { |
76 | | - throw new Error('Browser is not defined. Did you forget to pass it to createPageObjects?'); |
77 | | - } |
78 | | - const context = await browser.newContext(); |
79 | | - const u = createTestUtils({ |
80 | | - app, |
81 | | - page: createAppPageObject({ page: await context.newPage(), useTestingToken }, { baseURL: app.serverUrl }), |
82 | | - }); |
83 | | - await cb(u as any, context); |
84 | | - return u; |
85 | | - }, |
86 | | - }; |
87 | | - |
88 | | - return { |
89 | | - page: pageObjects.page, |
90 | | - services, |
91 | | - po: pageObjects, |
92 | | - tabs: browserHelpers, |
93 | | - // eslint-disable-next-line turbo/no-undeclared-env-vars |
94 | | - nextJsVersion: process.env.E2E_NEXTJS_VERSION, |
95 | | - } as any; |
96 | | -}; |
| 12 | + registerApiKeyAuthTests, |
| 13 | + registerM2MAuthTests, |
| 14 | + registerOAuthAuthTests, |
| 15 | +} from './machineAuthHelpers'; |
97 | 16 |
|
98 | 17 | export { testAgainstRunningApps } from './testAgainstRunningApps'; |
0 commit comments