Skip to content

Commit 5836ea3

Browse files
Port all webauthn tests to use updated test structure
1 parent 407a601 commit 5836ea3

File tree

6 files changed

+568
-1265
lines changed

6 files changed

+568
-1265
lines changed

test/end-to-end/webauthn.recover_account.test.js

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import fetch from "isomorphic-fetch";
2-
import { TEST_SERVER_BASE_URL } from "../constants";
31
import {
4-
backendBeforeEach,
52
setupBrowser,
63
screenshotOnFailure,
74
clearBrowserCookiesWithoutAffectingConsole,
85
getTestEmail,
96
waitForSTElement,
107
submitFormUnsafe,
118
isWebauthnSupported,
9+
backendHook,
10+
setupCoreApp,
11+
setupST,
1212
} from "../helpers";
1313
import { openRecoveryWithToken, signUpAndSendRecoveryEmail, getTokenFromEmail } from "./webauthn.helpers";
1414
import assert from "assert";
@@ -25,11 +25,10 @@ describe("SuperTokens Webauthn Recover Account", () => {
2525
skipped = true;
2626
this.skip();
2727
}
28-
await backendBeforeEach();
2928

30-
await fetch(`${TEST_SERVER_BASE_URL}/startst`, {
31-
method: "POST",
32-
}).catch(console.error);
29+
await backendHook("before");
30+
const coreUrl = await setupCoreApp();
31+
await setupST({ coreUrl });
3332

3433
browser = await setupBrowser();
3534
page = await browser.newPage();
@@ -45,21 +44,18 @@ describe("SuperTokens Webauthn Recover Account", () => {
4544
if (skipped) {
4645
return;
4746
}
48-
await browser.close();
49-
await fetch(`${TEST_SERVER_BASE_URL}/after`, {
50-
method: "POST",
51-
}).catch(console.error);
52-
53-
await fetch(`${TEST_SERVER_BASE_URL}/stopst`, {
54-
method: "POST",
55-
}).catch(console.error);
47+
await page?.close();
48+
await browser?.close();
49+
await backendHook("after");
5650
});
5751

58-
afterEach(function () {
59-
return screenshotOnFailure(this, browser);
52+
afterEach(async function () {
53+
await screenshotOnFailure(this, browser);
54+
await backendHook("afterEach");
6055
});
6156

6257
beforeEach(async function () {
58+
await backendHook("beforeEach");
6359
consoleLogs = [];
6460
consoleLogs = await clearBrowserCookiesWithoutAffectingConsole(page, consoleLogs);
6561

test/end-to-end/webauthn.recovery_email.test.js

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import fetch from "isomorphic-fetch";
2-
import { TEST_SERVER_BASE_URL } from "../constants";
31
import {
4-
backendBeforeEach,
2+
backendHook,
53
setupBrowser,
64
screenshotOnFailure,
75
clearBrowserCookiesWithoutAffectingConsole,
86
toggleSignInSignUp,
97
waitForSTElement,
108
getTestEmail,
119
isWebauthnSupported,
10+
setupCoreApp,
11+
setupST,
1212
} from "../helpers";
1313
import { openRecoveryAccountPage, signUpAndSendRecoveryEmail, getTokenFromEmail } from "./webauthn.helpers";
1414
import assert from "assert";
@@ -24,11 +24,10 @@ describe("SuperTokens Webauthn Recovery Email", () => {
2424
skipped = true;
2525
this.skip();
2626
}
27-
await backendBeforeEach();
2827

29-
await fetch(`${TEST_SERVER_BASE_URL}/startst`, {
30-
method: "POST",
31-
}).catch(console.error);
28+
await backendHook("before");
29+
const coreUrl = await setupCoreApp();
30+
await setupST({ coreUrl });
3231

3332
browser = await setupBrowser();
3433
page = await browser.newPage();
@@ -44,21 +43,18 @@ describe("SuperTokens Webauthn Recovery Email", () => {
4443
if (skipped) {
4544
return;
4645
}
47-
await browser.close();
48-
await fetch(`${TEST_SERVER_BASE_URL}/after`, {
49-
method: "POST",
50-
}).catch(console.error);
51-
52-
await fetch(`${TEST_SERVER_BASE_URL}/stopst`, {
53-
method: "POST",
54-
}).catch(console.error);
46+
await page?.close();
47+
await browser?.close();
48+
await backendHook("after");
5549
});
5650

57-
afterEach(function () {
58-
return screenshotOnFailure(this, browser);
51+
afterEach(async function () {
52+
await screenshotOnFailure(this, browser);
53+
await backendHook("afterEach");
5954
});
6055

6156
beforeEach(async function () {
57+
await backendHook("beforeEach");
6258
consoleLogs = [];
6359
consoleLogs = await clearBrowserCookiesWithoutAffectingConsole(page, consoleLogs);
6460
await toggleSignInSignUp(page);

test/end-to-end/webauthn.signin.test.js

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
import fetch from "isomorphic-fetch";
2-
import { TEST_SERVER_BASE_URL } from "../constants";
31
import {
4-
backendBeforeEach,
52
setupBrowser,
63
screenshotOnFailure,
74
clearBrowserCookiesWithoutAffectingConsole,
85
toggleSignInSignUp,
9-
setEnabledRecipes,
106
waitForSTElement,
117
submitFormUnsafe,
128
waitForUrl,
139
getUserIdFromSessionContext,
1410
isWebauthnSupported,
11+
backendHook,
12+
setupCoreApp,
13+
setupST,
1514
} from "../helpers";
1615
import { tryWebauthnSignIn } from "./webauthn.helpers";
1716
import assert from "assert";
@@ -21,19 +20,20 @@ describe("SuperTokens Webauthn SignIn", () => {
2120
let page;
2221
let consoleLogs = [];
2322
let skipped = false;
23+
const appConfig = {
24+
enabledRecipes: ["webauthn", "emailpassword", "session", "dashboard", "userroles", "multifactorauth"],
25+
};
2426

2527
before(async function () {
2628
if (!(await isWebauthnSupported())) {
2729
skipped = true;
2830
this.skip();
2931
}
30-
await backendBeforeEach();
3132

32-
await fetch(`${TEST_SERVER_BASE_URL}/startst`, {
33-
method: "POST",
34-
}).catch(console.error);
35-
36-
await setEnabledRecipes(["webauthn", "emailpassword", "session", "dashboard", "userroles", "multifactorauth"]);
33+
await backendHook("before");
34+
const coreUrl = await setupCoreApp();
35+
appConfig.coreUrl = coreUrl;
36+
await setupST(appConfig);
3737

3838
browser = await setupBrowser();
3939
page = await browser.newPage();
@@ -49,21 +49,18 @@ describe("SuperTokens Webauthn SignIn", () => {
4949
if (skipped) {
5050
return;
5151
}
52-
await browser.close();
53-
await fetch(`${TEST_SERVER_BASE_URL}/after`, {
54-
method: "POST",
55-
}).catch(console.error);
56-
57-
await fetch(`${TEST_SERVER_BASE_URL}/stopst`, {
58-
method: "POST",
59-
}).catch(console.error);
52+
await page?.close();
53+
await browser?.close();
54+
await backendHook("after");
6055
});
6156

62-
afterEach(function () {
63-
return screenshotOnFailure(this, browser);
57+
afterEach(async function () {
58+
await screenshotOnFailure(this, browser);
59+
await backendHook("afterEach");
6460
});
6561

6662
beforeEach(async function () {
63+
await backendHook("beforeEach");
6764
consoleLogs = [];
6865
consoleLogs = await clearBrowserCookiesWithoutAffectingConsole(page, consoleLogs);
6966
await toggleSignInSignUp(page);

test/end-to-end/webauthn.signup.test.js

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
import fetch from "isomorphic-fetch";
2-
import { TEST_SERVER_BASE_URL } from "../constants";
31
import {
4-
backendBeforeEach,
52
setupBrowser,
63
screenshotOnFailure,
74
clearBrowserCookiesWithoutAffectingConsole,
85
toggleSignInSignUp,
96
getTestEmail,
107
waitForSTElement,
118
submitFormUnsafe,
12-
setEnabledRecipes,
139
setInputValues,
1410
isWebauthnSupported,
1511
waitForUrl,
1612
getUserIdFromSessionContext,
13+
backendHook,
14+
setupCoreApp,
15+
setupST,
1716
} from "../helpers";
1817
import { tryWebauthnSignUp, openWebauthnSignUp } from "./webauthn.helpers";
1918
import assert from "assert";
@@ -23,20 +22,20 @@ describe("SuperTokens Webauthn SignUp", () => {
2322
let page;
2423
let consoleLogs = [];
2524
let skipped = false;
25+
const appConfig = {
26+
enabledRecipes: ["webauthn", "emailpassword", "session", "dashboard", "userroles", "multifactorauth"],
27+
};
2628

2729
before(async function () {
2830
if (!(await isWebauthnSupported())) {
2931
skipped = true;
3032
this.skip();
3133
}
3234

33-
await backendBeforeEach();
34-
35-
await fetch(`${TEST_SERVER_BASE_URL}/startst`, {
36-
method: "POST",
37-
}).catch(console.error);
38-
39-
await setEnabledRecipes(["webauthn", "emailpassword", "session", "dashboard", "userroles", "multifactorauth"]);
35+
await backendHook("before");
36+
const coreUrl = await setupCoreApp();
37+
appConfig.coreUrl = coreUrl;
38+
await setupST(appConfig);
4039

4140
browser = await setupBrowser();
4241
page = await browser.newPage();
@@ -53,29 +52,26 @@ describe("SuperTokens Webauthn SignUp", () => {
5352
return;
5453
}
5554

56-
await browser.close();
57-
await fetch(`${TEST_SERVER_BASE_URL}/after`, {
58-
method: "POST",
59-
}).catch(console.error);
60-
61-
await fetch(`${TEST_SERVER_BASE_URL}/stopst`, {
62-
method: "POST",
63-
}).catch(console.error);
55+
await page?.close();
56+
await browser?.close();
57+
await backendHook("after");
6458
});
6559

66-
afterEach(function () {
67-
return screenshotOnFailure(this, browser);
60+
afterEach(async function () {
61+
await screenshotOnFailure(this, browser);
62+
await backendHook("afterEach");
6863
});
6964

7065
beforeEach(async function () {
66+
await backendHook("beforeEach");
7167
consoleLogs = [];
7268
consoleLogs = await clearBrowserCookiesWithoutAffectingConsole(page, consoleLogs);
7369
await toggleSignInSignUp(page);
7470
});
7571

7672
describe("SignUp test", () => {
7773
it("should not show the back button and continue without passkey button if there is only one recipe", async () => {
78-
await setEnabledRecipes(["webauthn", "multifactorauth"]);
74+
await setupST({ ...appConfig, enabledRecipes: ["webauthn", "multifactorauth"] });
7975
await openWebauthnSignUp(page);
8076

8177
// Use puppeteer to check if the back button is not shown
@@ -100,14 +96,7 @@ describe("SuperTokens Webauthn SignUp", () => {
10096
assert.strictEqual(continueWithoutPasskeyBtnAfterSubmit, null);
10197

10298
// Reset the recipes after test is done
103-
await setEnabledRecipes([
104-
"webauthn",
105-
"emailpassword",
106-
"session",
107-
"dashboard",
108-
"userroles",
109-
"multifactorauth",
110-
]);
99+
await setupST({ ...appConfig });
111100
});
112101
it("should show the create a passkey successfully", async () => {
113102
const email = await getTestEmail();

test/server/index.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ try {
7979
WebauthnRaw = require("supertokens-node/lib/build/recipe/webauthn/recipe").default;
8080
Webauthn = require("supertokens-node/recipe/webauthn");
8181
} catch {
82+
console.log("Webauthn is not supported by the tested version of the node SDK");
8283
// Webauthn is not supported by the tested version of the node SDK
8384
}
8485

@@ -979,6 +980,10 @@ app.get("/test/featureFlags", (req, res) => {
979980
available.push("oauth2");
980981
available.push("accountlinking-fixes");
981982

983+
if (Webauthn !== undefined) {
984+
available.push("webauthn");
985+
}
986+
982987
res.send({
983988
available,
984989
});
@@ -993,6 +998,55 @@ app.post("/test/create-oauth2-client", async (req, res, next) => {
993998
}
994999
});
9951000

1001+
app.get("/test/webauthn/get-token", async (req, res) => {
1002+
const webauthn = webauthnStore.get(req.query.email);
1003+
if (!webauthn) {
1004+
res.status(404).send({ error: "Webauthn not found" });
1005+
return;
1006+
}
1007+
res.send({ token: webauthn.token });
1008+
});
1009+
1010+
app.post("/test/webauthn/create-and-assert-credential", async (req, res) => {
1011+
try {
1012+
const { registerOptionsResponse, signInOptionsResponse, rpId, rpName, origin } = req.body;
1013+
1014+
const { createAndAssertCredential } = await getWebauthnLib();
1015+
const credential = createAndAssertCredential(registerOptionsResponse, signInOptionsResponse, {
1016+
rpId,
1017+
rpName,
1018+
origin,
1019+
userNotPresent: false,
1020+
userNotVerified: false,
1021+
});
1022+
1023+
res.send({ credential });
1024+
} catch (error) {
1025+
console.error("Error in create-and-assert-credential:", error);
1026+
res.status(500).send({ error: error.message });
1027+
}
1028+
});
1029+
1030+
app.post("/test/webauthn/create-credential", async (req, res) => {
1031+
try {
1032+
const { registerOptionsResponse, rpId, rpName, origin } = req.body;
1033+
1034+
const { createCredential } = await getWebauthnLib();
1035+
const credential = createCredential(registerOptionsResponse, {
1036+
rpId,
1037+
rpName,
1038+
origin,
1039+
userNotPresent: false,
1040+
userNotVerified: false,
1041+
});
1042+
1043+
res.send({ credential });
1044+
} catch (error) {
1045+
console.error("Error in create-credential:", error);
1046+
res.status(500).send({ error: error.message });
1047+
}
1048+
});
1049+
9961050
app.use(errorHandler());
9971051

9981052
app.use(async (err, req, res, next) => {

0 commit comments

Comments
 (0)