Skip to content

Commit d235639

Browse files
author
aehnh
committed
change tests to handle auto append
1 parent 63eec49 commit d235639

7 files changed

Lines changed: 70 additions & 21 deletions

File tree

packages/tests-e2e/src/connect/models/BaseModel.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ export class BaseModel {
3232
this.page = page;
3333
this.authenticator = authenticator;
3434
this.blocker = blocker;
35-
this.signup = new SignupModel(page);
35+
this.signup = new SignupModel(page, authenticator);
3636
this.login = new LoginModel(page, authenticator);
3737
this.append = new AppendModel(page, authenticator);
3838
this.home = new HomeModel(page);
3939
this.passkeyList = new PasskeyListModel(page, authenticator);
4040
this.webhook = new WebhookModel(page);
4141
this.storage = new StorageModel(page);
42-
this.mfa = new MFAModel(page);
42+
this.mfa = new MFAModel(page, authenticator);
4343
}
4444

4545
loadSignup() {
@@ -64,17 +64,20 @@ export class BaseModel {
6464

6565
async createUser(invited: boolean, append: boolean) {
6666
this.email = await this.signup.autofillCredentials();
67-
await this.signup.submit();
68-
this.mfa.registerTokenUsed();
6967
if (invited) {
70-
await this.expectScreen(ScreenNames.PasskeyAppend);
7168
if (append) {
72-
await this.append.appendPasskey(true);
69+
await this.signup.autoAppendPasskey(true);
7370
await this.expectScreen(ScreenNames.PasskeyAppended);
7471
await this.append.confirmAppended();
7572
} else {
73+
// todo: figure out how to wait until continue button no longer has loading sign
74+
await this.signup.autoAppendPasskey(false);
75+
await this.expectScreen(ScreenNames.PasskeyAppend);
7676
await this.append.skipAppend();
7777
}
78+
} else {
79+
await this.signup.submit();
7880
}
81+
this.mfa.registerTokenUsed();
7982
}
8083
}

packages/tests-e2e/src/connect/models/MFAModel.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
import type { Page } from '@playwright/test';
22
import { expect } from '@playwright/test';
33

4+
import { ScreenNames } from '../utils/Constants';
5+
import { expectScreen } from '../utils/ExpectScreen';
6+
import type { VirtualAuthenticator } from '../utils/VirtualAuthenticator';
7+
48
export class MFAModel {
59
page: Page;
10+
authenticator: VirtualAuthenticator;
611
timestamp: number;
712

8-
constructor(page: Page) {
13+
constructor(page: Page, authenticator: VirtualAuthenticator) {
914
this.page = page;
15+
this.authenticator = authenticator;
1016
this.timestamp = Date.now();
1117
}
1218

@@ -24,4 +30,16 @@ export class MFAModel {
2430
submit() {
2531
return this.page.getByRole('button', { name: 'Submit' }).click();
2632
}
33+
34+
autoAppendPasskey(complete: boolean) {
35+
const operationTrigger = () => this.page.getByRole('button', { name: 'Submit' }).click();
36+
if (complete) {
37+
return this.authenticator.startAndCompletePasskeyOperation(operationTrigger);
38+
} else {
39+
return this.authenticator.startAndCancelPasskeyOperation(operationTrigger, async () => {
40+
await expectScreen(this.page, ScreenNames.PasskeyAppend);
41+
await this.page.waitForSelector('.button-loading-container', { state: 'detached' });
42+
});
43+
}
44+
}
2745
}

packages/tests-e2e/src/connect/models/SignupModel.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
import type { Page } from '@playwright/test';
22

3+
import type { VirtualAuthenticator } from '../utils/VirtualAuthenticator';
4+
import { ScreenNames } from '../utils/Constants';
5+
import { expectScreen } from '../utils/ExpectScreen';
6+
37
export class SignupModel {
48
page: Page;
9+
authenticator: VirtualAuthenticator;
510

6-
constructor(page: Page) {
11+
constructor(page: Page, authenticator: VirtualAuthenticator) {
712
this.page = page;
13+
this.authenticator = authenticator;
814
}
915

1016
async autofillCredentials(): Promise<string> {
@@ -15,4 +21,16 @@ export class SignupModel {
1521
submit() {
1622
return this.page.getByRole('button', { name: 'Sign up' }).click();
1723
}
24+
25+
autoAppendPasskey(complete: boolean) {
26+
const operationTrigger = () => this.page.getByRole('button', { name: 'Sign up' }).click();
27+
if (complete) {
28+
return this.authenticator.startAndCompletePasskeyOperation(operationTrigger);
29+
} else {
30+
return this.authenticator.startAndCancelPasskeyOperation(operationTrigger, async () => {
31+
await expectScreen(this.page, ScreenNames.PasskeyAppend);
32+
await this.page.waitForSelector('.button-loading-container', { state: 'detached' });
33+
});
34+
}
35+
}
1836
}

packages/tests-e2e/src/connect/scenarios/append.spec.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,38 @@ import { expect } from '@playwright/test';
22

33
import { test } from '../fixtures/BaseTest';
44
import { password, ScreenNames } from '../utils/Constants';
5-
import { loadPasskeyAppend, setupNetworkBlocker, setupUser, setupVirtualAuthenticator } from './hooks';
5+
import {
6+
loadBeforePasskeyAppend,
7+
setupNetworkBlocker,
8+
setupUser,
9+
setupVirtualAuthenticator,
10+
} from './hooks';
611

712
test.describe('append component', () => {
813
setupVirtualAuthenticator(test);
914
setupNetworkBlocker(test);
1015
setupUser(test, true, false);
11-
loadPasskeyAppend(test);
16+
loadBeforePasskeyAppend(test);
1217

1318
test('successful passkey append on login', async ({ model }) => {
14-
await model.append.appendPasskey(true);
19+
// await model.append.appendPasskey(true);
20+
await model.mfa.autoAppendPasskey(true);
1521
await model.expectScreen(ScreenNames.PasskeyAppended);
1622

1723
await model.append.confirmAppended();
1824
await model.expectScreen(ScreenNames.Home);
1925
});
2026

2127
test('failed passkey append on login', async ({ model }) => {
22-
await model.append.appendPasskey(false);
28+
// await model.append.appendPasskey(false);
29+
await model.mfa.autoAppendPasskey(false);
2330
});
2431

2532
test('Corbado FAPI unavailable after authentication', async ({ model }) => {
2633
await model.blocker.blockCorbadoFAPIFinishEndpoint();
2734

28-
await model.append.appendPasskey(true);
35+
// await model.append.appendPasskey(true);
36+
await model.mfa.autoAppendPasskey(true);
2937
await model.expectScreen(ScreenNames.Home);
3038
});
3139
});

packages/tests-e2e/src/connect/scenarios/hooks.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export function setupUser(
8383
}
8484

8585
// assumes that setupUser(test, true, false) has been called right before
86-
export function loadPasskeyAppend(
86+
export function loadBeforePasskeyAppend(
8787
test: TestType<
8888
PlaywrightTestArgs & PlaywrightTestOptions & { model: BaseModel },
8989
PlaywrightWorkerArgs & PlaywrightWorkerOptions
@@ -100,8 +100,8 @@ export function loadPasskeyAppend(
100100
await model.expectScreen(ScreenNames.MFA);
101101

102102
await model.mfa.autofillTOTP();
103-
await model.mfa.submit();
104-
await model.expectScreen(ScreenNames.PasskeyAppend);
103+
// await model.mfa.submit();
104+
// await model.expectScreen(ScreenNames.PasskeyAppend);
105105
});
106106
}
107107

packages/tests-e2e/src/connect/scenarios/login.spec.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ test.describe('login component (with invitation token, without passkeys)', () =>
3535
await model.expectScreen(ScreenNames.MFA);
3636

3737
await model.mfa.autofillTOTP();
38-
await model.mfa.submit();
39-
await model.expectScreen(ScreenNames.PasskeyAppend);
38+
// await model.mfa.submit();
39+
// await model.expectScreen(ScreenNames.PasskeyAppend);
40+
await model.mfa.autoAppendPasskey(false);
4041

4142
await model.append.skipAppend();
4243
await model.expectScreen(ScreenNames.Home);

packages/tests-e2e/src/connect/scenarios/misc.spec.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { test } from '../fixtures/BaseTest';
22
import { ScreenNames, WebhookTypes } from '../utils/Constants';
33
import {
4-
loadPasskeyAppend,
4+
loadBeforePasskeyAppend,
55
loadPasskeyList,
66
setupNetworkBlocker,
77
setupUser,
@@ -34,11 +34,12 @@ test.describe.serial('webhook tests', () => {
3434
setupVirtualAuthenticator(test);
3535
setupNetworkBlocker(test);
3636
setupUser(test, true, false);
37-
loadPasskeyAppend(test);
37+
loadBeforePasskeyAppend(test);
3838
setupWebhooks(test, [WebhookTypes.Create]);
3939

4040
test('successful passkey append on login (+ webhook)', async ({ model }) => {
41-
await model.append.appendPasskey(true);
41+
// await model.append.appendPasskey(true);
42+
await model.mfa.autoAppendPasskey(true);
4243
await model.expectScreen(ScreenNames.PasskeyAppended);
4344

4445
await model.append.confirmAppended();

0 commit comments

Comments
 (0)