diff --git a/app/assets/javascripts/discourse/tests/acceptance/preferences-test.js b/app/assets/javascripts/discourse/tests/acceptance/preferences-test.js index 3ecca742ac2..de5a8d0840a 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/preferences-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/preferences-test.js @@ -17,13 +17,6 @@ import selectKit from "discourse/tests/helpers/select-kit-helper"; import { test } from "qunit"; function preferencesPretender(server, helper) { - server.post("/u/second_factors.json", () => { - return helper.response({ - success: "OK", - password_required: "true", - }); - }); - server.post("/u/create_second_factor_totp.json", () => { return helper.response({ key: "rcyryaqage3jexfj", @@ -31,19 +24,6 @@ function preferencesPretender(server, helper) { }); }); - server.post("/u/create_second_factor_security_key.json", () => { - return helper.response({ - challenge: "a6d393d12654c130b2273e68ca25ca232d1d7f4c2464c2610fb8710a89d4", - rp_id: "localhost", - rp_name: "Discourse", - supported_algorithms: [-7, -257], - }); - }); - - server.post("/u/enable_second_factor_totp.json", () => { - return helper.response({ error: "invalid token" }); - }); - server.put("/u/second_factors_backup.json", () => { return helper.response({ backup_codes: ["dsffdsd", "fdfdfdsf", "fddsds"], @@ -177,52 +157,6 @@ acceptance("User Preferences", function (needs) { ); }); - test("second factor totp", async function (assert) { - await visit("/u/eviltrout/preferences/second-factor"); - - assert.ok(exists("#password"), "it has a password input"); - - await fillIn("#password", "secrets"); - await click(".user-preferences .btn-primary"); - assert.notOk(exists("#password"), "it hides the password input"); - - await click(".new-totp"); - assert.ok(exists(".qr-code img"), "shows qr code image"); - - await click(".add-totp"); - - assert.ok( - query(".alert-error").innerHTML.includes("provide a name and the code"), - "shows name/token missing error message" - ); - }); - - test("second factor security keys", async function (assert) { - await visit("/u/eviltrout/preferences/second-factor"); - - assert.ok(exists("#password"), "it has a password input"); - - await fillIn("#password", "secrets"); - await click(".user-preferences .btn-primary"); - assert.notOk(exists("#password"), "it hides the password input"); - - await click(".new-security-key"); - assert.ok(exists("#security-key-name"), "shows security key name input"); - - await fillIn("#security-key-name", ""); - - // The following tests can only run when Webauthn is enabled. This is not - // always the case, for example on a browser running on a non-standard port - if (typeof PublicKeyCredential !== "undefined") { - await click(".add-security-key"); - - assert.ok( - query(".alert-error").innerHTML.includes("provide a name"), - "shows name missing error message" - ); - } - }); - test("default avatar selector", async function (assert) { await visit("/u/eviltrout/preferences"); @@ -239,41 +173,6 @@ acceptance("User Preferences", function (needs) { }); }); -acceptance("Second Factor Backups", function (needs) { - needs.user(); - needs.pretender((server, helper) => { - server.post("/u/second_factors.json", () => { - return helper.response({ - success: "OK", - totps: [{ id: 1, name: "one of them" }], - }); - }); - - server.put("/u/second_factors_backup.json", () => { - return helper.response({ - backup_codes: ["dsffdsd", "fdfdfdsf", "fddsds"], - }); - }); - - server.get("/u/eviltrout/activity.json", () => { - return helper.response({}); - }); - }); - - test("second factor backup", async function (assert) { - updateCurrentUser({ second_factor_enabled: true }); - await visit("/u/eviltrout/preferences/second-factor"); - await click(".edit-2fa-backup"); - assert.ok( - exists(".second-factor-backup-preferences"), - "shows the 2fa backup panel" - ); - await click(".second-factor-backup-preferences .btn-primary"); - - assert.ok(exists(".backup-codes-area"), "shows backup codes"); - }); -}); - acceptance( "Avatar selector when selectable avatars is enabled", function (needs) { diff --git a/app/assets/javascripts/discourse/tests/acceptance/user-preferences-second-factor-backup-test.js b/app/assets/javascripts/discourse/tests/acceptance/user-preferences-second-factor-backup-test.js new file mode 100644 index 00000000000..218823c6769 --- /dev/null +++ b/app/assets/javascripts/discourse/tests/acceptance/user-preferences-second-factor-backup-test.js @@ -0,0 +1,45 @@ +import { test } from "qunit"; +import { click, visit } from "@ember/test-helpers"; +import { + acceptance, + exists, + updateCurrentUser, +} from "discourse/tests/helpers/qunit-helpers"; + +acceptance("User Preferences - Second Factor Backup", function (needs) { + needs.user(); + + needs.pretender((server, helper) => { + server.post("/u/second_factors.json", () => { + return helper.response({ + success: "OK", + totps: [{ id: 1, name: "one of them" }], + }); + }); + + server.put("/u/second_factors_backup.json", () => { + return helper.response({ + backup_codes: ["dsffdsd", "fdfdfdsf", "fddsds"], + }); + }); + + server.get("/u/eviltrout/activity.json", () => { + return helper.response({}); + }); + }); + + test("second factor backup", async function (assert) { + updateCurrentUser({ second_factor_enabled: true }); + await visit("/u/eviltrout/preferences/second-factor"); + await click(".edit-2fa-backup"); + + assert.ok( + exists(".second-factor-backup-preferences"), + "shows the 2fa backup panel" + ); + + await click(".second-factor-backup-preferences .btn-primary"); + + assert.ok(exists(".backup-codes-area"), "shows backup codes"); + }); +}); diff --git a/app/assets/javascripts/discourse/tests/acceptance/user-preferences-second-factor-test.js b/app/assets/javascripts/discourse/tests/acceptance/user-preferences-second-factor-test.js new file mode 100644 index 00000000000..d5b9a2630e0 --- /dev/null +++ b/app/assets/javascripts/discourse/tests/acceptance/user-preferences-second-factor-test.js @@ -0,0 +1,93 @@ +import { test } from "qunit"; +import { click, fillIn, visit } from "@ember/test-helpers"; +import { + acceptance, + exists, + query, +} from "discourse/tests/helpers/qunit-helpers"; + +acceptance("User Preferences - Second Factor", function (needs) { + needs.user(); + + needs.pretender((server, helper) => { + server.post("/u/second_factors.json", () => { + return helper.response({ + success: "OK", + password_required: "true", + }); + }); + + server.post("/u/create_second_factor_security_key.json", () => { + return helper.response({ + challenge: + "a6d393d12654c130b2273e68ca25ca232d1d7f4c2464c2610fb8710a89d4", + rp_id: "localhost", + rp_name: "Discourse", + supported_algorithms: [-7, -257], + }); + }); + + server.post("/u/enable_second_factor_totp.json", () => { + return helper.response({ error: "invalid token" }); + }); + + server.post("/u/create_second_factor_totp.json", () => { + return helper.response({ + key: "rcyryaqage3jexfj", + qr: "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=", + }); + }); + + server.put("/u/second_factors_backup.json", () => { + return helper.response({ + backup_codes: ["dsffdsd", "fdfdfdsf", "fddsds"], + }); + }); + }); + + test("second factor totp", async function (assert) { + await visit("/u/eviltrout/preferences/second-factor"); + + assert.ok(exists("#password"), "it has a password input"); + + await fillIn("#password", "secrets"); + await click(".user-preferences .btn-primary"); + assert.notOk(exists("#password"), "it hides the password input"); + + await click(".new-totp"); + assert.ok(exists(".qr-code img"), "shows qr code image"); + + await click(".add-totp"); + + assert.ok( + query(".alert-error").innerHTML.includes("provide a name and the code"), + "shows name/token missing error message" + ); + }); + + test("second factor security keys", async function (assert) { + await visit("/u/eviltrout/preferences/second-factor"); + + assert.ok(exists("#password"), "it has a password input"); + + await fillIn("#password", "secrets"); + await click(".user-preferences .btn-primary"); + assert.notOk(exists("#password"), "it hides the password input"); + + await click(".new-security-key"); + assert.ok(exists("#security-key-name"), "shows security key name input"); + + await fillIn("#security-key-name", ""); + + // The following tests can only run when Webauthn is enabled. This is not + // always the case, for example on a browser running on a non-standard port + if (typeof PublicKeyCredential !== "undefined") { + await click(".add-security-key"); + + assert.ok( + query(".alert-error").innerHTML.includes("provide a name"), + "shows name missing error message" + ); + } + }); +});