Skip to content

Commit 74d109c

Browse files
committed
chore(repo): Clean up machine integration tests
1 parent c50e887 commit 74d109c

8 files changed

Lines changed: 807 additions & 1503 deletions

File tree

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

integration/testUtils/index.ts

Lines changed: 7 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,17 @@
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';
101
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';
134

145
export type { FakeAPIKey, FakeOrganization, FakeUser, FakeUserWithEmail };
15-
export type { FakeMachineNetwork, FakeOAuthApp } from './machineAuthService';
6+
export type { FakeMachineNetwork, FakeOAuthApp, MachineAuthTestAdapter } from './machineAuthHelpers';
167
export {
178
createFakeMachineNetwork,
189
createFakeOAuthApp,
1910
createJwtM2MToken,
2011
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';
9716

9817
export { testAgainstRunningApps } from './testAgainstRunningApps';

0 commit comments

Comments
 (0)