2015-05-13 22:42:36 +08:00
|
|
|
import { acceptance } from "helpers/qunit-helpers";
|
2018-08-20 10:28:16 +08:00
|
|
|
import User from "discourse/models/user";
|
|
|
|
|
2017-12-22 09:18:12 +08:00
|
|
|
acceptance("User Preferences", {
|
|
|
|
loggedIn: true,
|
2018-07-23 23:51:57 +08:00
|
|
|
pretend(server, helper) {
|
|
|
|
server.post("/u/second_factors.json", () => {
|
|
|
|
return helper.response({
|
2018-02-20 14:44:51 +08:00
|
|
|
key: "rcyryaqage3jexfj",
|
|
|
|
qr: '<div id="test-qr">qr-code</div>'
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
server.put("/u/second_factor.json", () => {
|
|
|
|
return helper.response({ error: "invalid token" });
|
2017-12-22 09:18:12 +08:00
|
|
|
});
|
2018-06-28 16:12:32 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
server.put("/u/second_factors_backup.json", () => {
|
|
|
|
return helper.response({
|
|
|
|
backup_codes: ["dsffdsd", "fdfdfdsf", "fddsds"]
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
server.post("/u/eviltrout/preferences/revoke-account", () => {
|
|
|
|
return helper.response({
|
|
|
|
success: true
|
|
|
|
});
|
2018-06-28 16:12:32 +08:00
|
|
|
});
|
2018-08-20 10:28:16 +08:00
|
|
|
|
2018-08-30 05:10:56 +08:00
|
|
|
server.put("/u/eviltrout/preferences/email", () => {
|
|
|
|
return helper.response({
|
|
|
|
success: true
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2018-08-20 10:28:16 +08:00
|
|
|
server.post("/user_avatar/eviltrout/refresh_gravatar.json", () => {
|
|
|
|
return helper.response({
|
|
|
|
gravatar_upload_id: 6543,
|
|
|
|
gravatar_avatar_template: "something"
|
|
|
|
});
|
|
|
|
});
|
2018-10-09 22:21:41 +08:00
|
|
|
|
|
|
|
server.get("/u/eviltrout/activity.json", () => {
|
|
|
|
return helper.response({});
|
|
|
|
});
|
2017-12-22 09:18:12 +08:00
|
|
|
}
|
|
|
|
});
|
2015-05-13 22:42:36 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
QUnit.test("update some fields", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences");
|
2015-05-13 22:42:36 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
assert.ok($("body.user-preferences-page").length, "has the body class");
|
|
|
|
assert.equal(
|
|
|
|
currentURL(),
|
|
|
|
"/u/eviltrout/preferences/account",
|
|
|
|
"defaults to account tab"
|
|
|
|
);
|
|
|
|
assert.ok(exists(".user-preferences"), "it shows the preferences");
|
2015-05-13 22:42:36 +08:00
|
|
|
|
2017-05-04 01:49:16 +08:00
|
|
|
const savePreferences = () => {
|
2018-06-15 23:03:24 +08:00
|
|
|
click(".save-user");
|
|
|
|
assert.ok(!exists(".saved-user"), "it hasn't been saved yet");
|
2017-05-04 01:49:16 +08:00
|
|
|
andThen(() => {
|
2018-06-15 23:03:24 +08:00
|
|
|
assert.ok(exists(".saved-user"), "it displays the saved message");
|
2017-05-04 01:49:16 +08:00
|
|
|
});
|
|
|
|
};
|
2017-04-27 04:18:16 +08:00
|
|
|
|
2017-05-05 00:03:59 +08:00
|
|
|
fillIn(".pref-name input[type=text]", "Jon Snow");
|
2018-07-23 23:51:57 +08:00
|
|
|
await savePreferences();
|
2017-05-05 00:03:59 +08:00
|
|
|
|
2017-05-04 01:49:16 +08:00
|
|
|
click(".preferences-nav .nav-profile a");
|
2015-05-13 22:42:36 +08:00
|
|
|
fillIn("#edit-location", "Westeros");
|
2018-07-23 23:51:57 +08:00
|
|
|
await savePreferences();
|
2015-05-13 22:42:36 +08:00
|
|
|
|
2017-05-04 01:49:16 +08:00
|
|
|
click(".preferences-nav .nav-emails a");
|
|
|
|
click(".pref-activity-summary input[type=checkbox]");
|
2018-07-23 23:51:57 +08:00
|
|
|
await savePreferences();
|
2017-05-04 01:49:16 +08:00
|
|
|
|
|
|
|
click(".preferences-nav .nav-notifications a");
|
2018-07-30 18:43:10 +08:00
|
|
|
await selectKit(".control-group.notifications .combo-box.duration").expand();
|
2018-07-30 04:51:32 +08:00
|
|
|
await selectKit(
|
|
|
|
".control-group.notifications .combo-box.duration"
|
|
|
|
).selectRowByValue(1440);
|
2018-07-23 23:51:57 +08:00
|
|
|
await savePreferences();
|
2017-05-04 01:49:16 +08:00
|
|
|
|
|
|
|
click(".preferences-nav .nav-categories a");
|
2018-06-15 23:03:24 +08:00
|
|
|
fillIn(".category-controls .category-selector", "faq");
|
2018-07-23 23:51:57 +08:00
|
|
|
await savePreferences();
|
2017-05-04 01:49:16 +08:00
|
|
|
|
2018-06-15 23:03:24 +08:00
|
|
|
assert.ok(
|
|
|
|
!exists(".preferences-nav .nav-tags a"),
|
|
|
|
"tags tab isn't there when tags are disabled"
|
|
|
|
);
|
2017-05-04 01:49:16 +08:00
|
|
|
|
2017-05-04 03:33:25 +08:00
|
|
|
// Error: Unhandled request in test environment: /themes/assets/10d71596-7e4e-4dc0-b368-faa3b6f1ce6d?_=1493833562388 (GET)
|
|
|
|
// click(".preferences-nav .nav-interface a");
|
|
|
|
// click('.control-group.other input[type=checkbox]:first');
|
|
|
|
// savePreferences();
|
2017-05-04 01:49:16 +08:00
|
|
|
|
2018-06-15 23:03:24 +08:00
|
|
|
assert.ok(
|
|
|
|
!exists(".preferences-nav .nav-apps a"),
|
|
|
|
"apps tab isn't there when you have no authorized apps"
|
|
|
|
);
|
2015-05-13 22:42:36 +08:00
|
|
|
});
|
2016-11-11 04:54:21 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
QUnit.test("username", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences/username");
|
|
|
|
assert.ok(exists("#change_username"), "it has the input element");
|
2016-11-11 04:54:21 +08:00
|
|
|
});
|
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
QUnit.test("about me", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences/about-me");
|
|
|
|
assert.ok(exists(".raw-bio"), "it has the input element");
|
2016-11-11 04:54:21 +08:00
|
|
|
});
|
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
QUnit.test("email", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences/email");
|
2016-12-21 17:00:45 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
assert.ok(exists("#change-email"), "it has the input element");
|
2016-12-21 17:00:45 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
await fillIn("#change-email", "invalidemail");
|
|
|
|
|
|
|
|
assert.equal(
|
|
|
|
find(".tip.bad")
|
|
|
|
.text()
|
|
|
|
.trim(),
|
|
|
|
I18n.t("user.email.invalid"),
|
|
|
|
"it should display invalid email tip"
|
|
|
|
);
|
2017-12-22 20:08:12 +08:00
|
|
|
});
|
2017-12-22 09:18:12 +08:00
|
|
|
|
2018-08-30 05:10:56 +08:00
|
|
|
QUnit.test("email field always shows up", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences/email");
|
|
|
|
|
|
|
|
assert.ok(exists("#change-email"), "it has the input element");
|
|
|
|
|
|
|
|
await fillIn("#change-email", "eviltrout@discourse.org");
|
|
|
|
await click(".user-preferences button.btn-primary");
|
|
|
|
|
|
|
|
await visit("/u/eviltrout/preferences");
|
|
|
|
await visit("/u/eviltrout/preferences/email");
|
|
|
|
|
|
|
|
assert.ok(exists("#change-email"), "it has the input element");
|
|
|
|
});
|
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
QUnit.test("connected accounts", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences/account");
|
2018-02-20 14:44:51 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
assert.ok(
|
|
|
|
exists(".pref-associated-accounts"),
|
|
|
|
"it has the connected accounts section"
|
|
|
|
);
|
|
|
|
assert.ok(
|
|
|
|
find(".pref-associated-accounts table tr:first td:first")
|
|
|
|
.html()
|
|
|
|
.indexOf("Facebook") > -1,
|
|
|
|
"it lists facebook"
|
|
|
|
);
|
2018-02-20 14:44:51 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
await click(".pref-associated-accounts table tr:first td:last button");
|
2018-02-20 14:44:51 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
find(".pref-associated-accounts table tr:first td:last button")
|
|
|
|
.html()
|
|
|
|
.indexOf("Connect") > -1;
|
|
|
|
});
|
2018-02-20 14:44:51 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
QUnit.test("second factor", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences/second-factor");
|
2018-02-20 14:44:51 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
assert.ok(exists("#password"), "it has a password input");
|
|
|
|
|
|
|
|
await fillIn("#password", "secrets");
|
|
|
|
await click(".user-preferences .btn-primary");
|
|
|
|
|
|
|
|
assert.ok(exists("#test-qr"), "shows qr code");
|
|
|
|
assert.notOk(exists("#password"), "it hides the password input");
|
|
|
|
|
|
|
|
await fillIn("#second-factor-token", "111111");
|
|
|
|
await click(".btn-primary");
|
|
|
|
|
|
|
|
assert.ok(
|
|
|
|
find(".alert-error")
|
|
|
|
.html()
|
|
|
|
.indexOf("invalid token") > -1,
|
|
|
|
"shows server validation error message"
|
|
|
|
);
|
2017-12-22 09:18:12 +08:00
|
|
|
});
|
2018-04-10 02:27:00 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
QUnit.test("second factor backup", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences/second-factor-backup");
|
2018-06-28 16:12:32 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
assert.ok(
|
|
|
|
exists("#second-factor-token"),
|
|
|
|
"it has a authentication token input"
|
|
|
|
);
|
2018-06-28 16:12:32 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
await fillIn("#second-factor-token", "111111");
|
|
|
|
await click(".user-preferences .btn-primary");
|
2018-06-28 16:12:32 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
assert.ok(exists(".backup-codes-area"), "shows backup codes");
|
2018-06-28 16:12:32 +08:00
|
|
|
});
|
|
|
|
|
2018-07-26 18:16:32 +08:00
|
|
|
QUnit.test("default avatar selector", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences");
|
2018-07-18 18:57:43 +08:00
|
|
|
|
2018-07-26 18:16:32 +08:00
|
|
|
await click(".pref-avatar .btn");
|
|
|
|
assert.ok(exists(".avatar-choice", "opens the avatar selection modal"));
|
2018-08-20 10:28:16 +08:00
|
|
|
|
|
|
|
await click(".avatar-selector-refresh-gravatar");
|
|
|
|
|
|
|
|
assert.equal(
|
|
|
|
User.currentProp("gravatar_avatar_upload_id"),
|
|
|
|
6543,
|
|
|
|
"it should set the gravatar_avatar_upload_id property"
|
|
|
|
);
|
2018-07-18 18:57:43 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
acceptance("Avatar selector when selectable avatars is enabled", {
|
2018-04-10 02:27:00 +08:00
|
|
|
loggedIn: true,
|
2018-07-18 18:57:43 +08:00
|
|
|
settings: { selectable_avatars_enabled: true },
|
2018-07-23 23:51:57 +08:00
|
|
|
pretend(server) {
|
|
|
|
server.get("/site/selectable-avatars.json", () => {
|
|
|
|
return [
|
|
|
|
200,
|
|
|
|
{ "Content-Type": "application/json" },
|
|
|
|
["https://www.discourse.org", "https://meta.discourse.org"]
|
|
|
|
];
|
2018-07-18 18:57:43 +08:00
|
|
|
});
|
2018-04-10 02:27:00 +08:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
QUnit.test("selectable avatars", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences");
|
2018-07-18 18:57:43 +08:00
|
|
|
|
2018-07-23 23:51:57 +08:00
|
|
|
await click(".pref-avatar .btn");
|
|
|
|
|
|
|
|
assert.ok(exists(".selectable-avatars", "opens the avatar selection modal"));
|
2018-07-18 18:57:43 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
acceptance("User Preferences when badges are disabled", {
|
|
|
|
loggedIn: true,
|
|
|
|
settings: { enable_badges: false }
|
|
|
|
});
|
|
|
|
|
2018-07-26 18:16:32 +08:00
|
|
|
QUnit.test("visit my preferences", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences");
|
|
|
|
assert.ok($("body.user-preferences-page").length, "has the body class");
|
|
|
|
assert.equal(
|
|
|
|
currentURL(),
|
|
|
|
"/u/eviltrout/preferences/account",
|
|
|
|
"defaults to account tab"
|
|
|
|
);
|
|
|
|
assert.ok(exists(".user-preferences"), "it shows the preferences");
|
2018-06-15 23:03:24 +08:00
|
|
|
});
|
2018-10-09 22:21:41 +08:00
|
|
|
|
|
|
|
QUnit.test("recently connected devices", async assert => {
|
|
|
|
await visit("/u/eviltrout/preferences");
|
|
|
|
|
|
|
|
assert.equal(
|
|
|
|
find(".pref-auth-tokens > a:first")
|
|
|
|
.text()
|
|
|
|
.trim(),
|
|
|
|
I18n.t("user.auth_tokens.show_all", { count: 3 }),
|
|
|
|
"it should display two tokens"
|
|
|
|
);
|
|
|
|
assert.ok(
|
|
|
|
find(".pref-auth-tokens .auth-token").length === 2,
|
|
|
|
"it should display two tokens"
|
|
|
|
);
|
|
|
|
|
|
|
|
await click(".pref-auth-tokens > a:first");
|
|
|
|
|
|
|
|
assert.ok(
|
|
|
|
find(".pref-auth-tokens .auth-token").length === 3,
|
|
|
|
"it should display three tokens"
|
|
|
|
);
|
|
|
|
|
|
|
|
await click(".auth-token-dropdown:first button");
|
|
|
|
await click("li[data-value='notYou']");
|
|
|
|
|
|
|
|
assert.ok(find(".d-modal:visible").length === 1, "modal should appear");
|
|
|
|
|
|
|
|
await click(".modal-footer .btn-primary");
|
|
|
|
|
|
|
|
assert.ok(
|
|
|
|
find(".pref-password.highlighted").length === 1,
|
|
|
|
"it should highlight password preferences"
|
|
|
|
);
|
|
|
|
});
|