mirror of
https://github.com/discourse/discourse.git
synced 2025-02-16 17:52:45 +08:00
![Gerhard Schlager](/assets/img/avatar_default.png)
* Remove unused strings
* Remove trailing quote from string
* Remove even more unused strings (they were removed in c4e10f2a9d
)
* Don't use translations in tests which are only available on server
* Use more specific translation (and fix missing translation)
147 lines
4.7 KiB
JavaScript
147 lines
4.7 KiB
JavaScript
import {
|
|
acceptance,
|
|
exists,
|
|
query,
|
|
} from "discourse/tests/helpers/qunit-helpers";
|
|
import { click, fillIn, visit } from "@ember/test-helpers";
|
|
import DiscourseURL from "discourse/lib/url";
|
|
import I18n from "I18n";
|
|
import PreloadStore from "discourse/lib/preload-store";
|
|
import { parsePostData } from "discourse/tests/helpers/create-pretender";
|
|
import sinon from "sinon";
|
|
import { test } from "qunit";
|
|
|
|
acceptance("Password Reset", function (needs) {
|
|
needs.pretender((server, helper) => {
|
|
server.get("/u/confirm-email-token/myvalidtoken.json", () =>
|
|
helper.response({ success: "OK" })
|
|
);
|
|
|
|
server.get("/u/confirm-email-token/requiretwofactor.json", () =>
|
|
helper.response({ success: "OK" })
|
|
);
|
|
|
|
server.put("/u/password-reset/myvalidtoken.json", (request) => {
|
|
const body = parsePostData(request.requestBody);
|
|
if (body.password === "jonesyAlienSlayer") {
|
|
return helper.response({
|
|
success: false,
|
|
errors: { password: ["is the name of your cat"] },
|
|
});
|
|
} else {
|
|
return helper.response({
|
|
success: "OK",
|
|
message:
|
|
"You successfully changed your password and are now logged in.",
|
|
});
|
|
}
|
|
});
|
|
|
|
server.put("/u/password-reset/requiretwofactor.json", (request) => {
|
|
const body = parsePostData(request.requestBody);
|
|
if (
|
|
body.password === "perf3ctly5ecur3" &&
|
|
body.second_factor_token === "123123"
|
|
) {
|
|
return helper.response({
|
|
success: "OK",
|
|
message:
|
|
"You successfully changed your password and are now logged in.",
|
|
});
|
|
} else if (body.second_factor_token === "123123") {
|
|
return helper.response({
|
|
success: false,
|
|
errors: { password: ["invalid"] },
|
|
});
|
|
} else {
|
|
return helper.response({
|
|
success: false,
|
|
message: "invalid token",
|
|
errors: { user_second_factors: ["invalid token"] },
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
test("Password Reset Page", async function (assert) {
|
|
PreloadStore.store("password_reset", { is_developer: false });
|
|
|
|
await visit("/u/password-reset/myvalidtoken");
|
|
assert.ok(exists(".password-reset input"), "shows the input");
|
|
|
|
await fillIn(".password-reset input", "perf3ctly5ecur3");
|
|
assert.ok(exists(".password-reset .tip.good"), "input looks good");
|
|
|
|
await fillIn(".password-reset input", "123");
|
|
assert.ok(exists(".password-reset .tip.bad"), "input is not valid");
|
|
assert.ok(
|
|
query(".password-reset .tip.bad").innerHTML.includes(
|
|
I18n.t("user.password.too_short")
|
|
),
|
|
"password too short"
|
|
);
|
|
|
|
await fillIn(".password-reset input", "jonesyAlienSlayer");
|
|
await click(".password-reset form button[type='submit']");
|
|
assert.ok(exists(".password-reset .tip.bad"), "input is not valid");
|
|
assert.ok(
|
|
query(".password-reset .tip.bad").innerHTML.includes(
|
|
"is the name of your cat"
|
|
),
|
|
"server validation error message shows"
|
|
);
|
|
|
|
assert.ok(
|
|
exists("#new-account-password[type='password']"),
|
|
"password is masked by default"
|
|
);
|
|
await click(".toggle-password-mask");
|
|
assert.ok(
|
|
exists("#new-account-password[type='text']"),
|
|
"password is unmasked after toggle is clicked"
|
|
);
|
|
|
|
await fillIn(".password-reset input", "perf3ctly5ecur3");
|
|
sinon.stub(DiscourseURL, "redirectTo");
|
|
await click(".password-reset form button[type='submit']");
|
|
assert.ok(DiscourseURL.redirectTo.calledWith("/"), "form is gone");
|
|
});
|
|
|
|
test("Password Reset Page With Second Factor", async function (assert) {
|
|
PreloadStore.store("password_reset", {
|
|
is_developer: false,
|
|
second_factor_required: true,
|
|
});
|
|
|
|
await visit("/u/password-reset/requiretwofactor");
|
|
|
|
assert.notOk(exists("#new-account-password"), "does not show the input");
|
|
assert.ok(exists("#second-factor"), "shows the second factor prompt");
|
|
|
|
await fillIn("input#second-factor", "0000");
|
|
await click(".password-reset form button");
|
|
|
|
assert.ok(exists(".alert-error"), "shows 2 factor error");
|
|
|
|
assert.ok(
|
|
query(".alert-error").innerHTML.includes("invalid token"),
|
|
"shows server validation error message"
|
|
);
|
|
|
|
await fillIn("input#second-factor", "123123");
|
|
await click(".password-reset form button");
|
|
|
|
assert.notOk(exists(".alert-error"), "hides error");
|
|
assert.ok(exists("#new-account-password"), "shows the input");
|
|
|
|
await fillIn(".password-reset input", "perf3ctly5ecur3");
|
|
|
|
sinon.stub(DiscourseURL, "redirectTo");
|
|
await click(".password-reset form button[type='submit']");
|
|
assert.ok(
|
|
DiscourseURL.redirectTo.calledWith("/"),
|
|
"it redirects after submitting form"
|
|
);
|
|
});
|
|
});
|