Based on issues identified in https://meta.discourse.org/t/improved-bookmarks-with-reminders/144542/20 * Implement the resolvedTimezone() function on the user model where we return the user's timezone if it has been set, or we guess it using moment and save it to the user using an update call if it has not yet been set. This covers the cases of users who do not log out/in often who will not get their timezone set via login. This also makes sure the guess + save is done in a non-obtrusive way not on every page -- only when it is needed. * Before if a user's timezone was blank when they visited their profile page we were autofilling the dropdown with the guessed timezone from moment. However this was confusing as it would appear you have that timezone saved in the DB when you really didn't. Now we do not autofill the dropdown and added a button to automatically guess the current timezone to make everything more explicit.
107 lines
2.7 KiB
JavaScript
107 lines
2.7 KiB
JavaScript
import User from "discourse/models/user";
|
|
import Group from "discourse/models/group";
|
|
import * as ajaxlib from "discourse/lib/ajax";
|
|
import pretender from "helpers/create-pretender";
|
|
|
|
QUnit.module("model:user");
|
|
|
|
QUnit.test("staff", assert => {
|
|
var user = User.create({ id: 1, username: "eviltrout" });
|
|
|
|
assert.ok(!user.get("staff"), "user is not staff");
|
|
|
|
user.toggleProperty("moderator");
|
|
assert.ok(user.get("staff"), "moderators are staff");
|
|
|
|
user.setProperties({ moderator: false, admin: true });
|
|
assert.ok(user.get("staff"), "admins are staff");
|
|
});
|
|
|
|
QUnit.test("searchContext", assert => {
|
|
var user = User.create({ id: 1, username: "EvilTrout" });
|
|
|
|
assert.deepEqual(
|
|
user.get("searchContext"),
|
|
{ type: "user", id: "eviltrout", user: user },
|
|
"has a search context"
|
|
);
|
|
});
|
|
|
|
QUnit.test("isAllowedToUploadAFile", assert => {
|
|
var user = User.create({ trust_level: 0, admin: true });
|
|
assert.ok(
|
|
user.isAllowedToUploadAFile("image"),
|
|
"admin can always upload a file"
|
|
);
|
|
|
|
user.setProperties({ admin: false, moderator: true });
|
|
assert.ok(
|
|
user.isAllowedToUploadAFile("image"),
|
|
"moderator can always upload a file"
|
|
);
|
|
});
|
|
|
|
QUnit.test("canMangeGroup", assert => {
|
|
let user = User.create({ admin: true });
|
|
let group = Group.create({ automatic: true });
|
|
|
|
assert.equal(
|
|
user.canManageGroup(group),
|
|
false,
|
|
"automatic groups cannot be managed."
|
|
);
|
|
|
|
group.set("automatic", false);
|
|
|
|
assert.equal(
|
|
user.canManageGroup(group),
|
|
true,
|
|
"an admin should be able to manage the group"
|
|
);
|
|
|
|
user.set("admin", false);
|
|
group.setProperties({ is_group_owner: true });
|
|
|
|
assert.equal(
|
|
user.canManageGroup(group),
|
|
true,
|
|
"a group owner should be able to manage the group"
|
|
);
|
|
});
|
|
|
|
QUnit.test("resolvedTimezone", assert => {
|
|
const tz = "Australia/Brisbane";
|
|
let user = User.create({ timezone: tz, username: "chuck" });
|
|
let stub = sandbox.stub(moment.tz, "guess").returns("America/Chicago");
|
|
|
|
pretender.put("/u/chuck.json", () => {
|
|
return [200, { "Content-Type": "application/json" }, {}];
|
|
});
|
|
|
|
let spy = sandbox.spy(ajaxlib, "ajax");
|
|
assert.equal(
|
|
user.resolvedTimezone(),
|
|
tz,
|
|
"if the user already has a timezone return it"
|
|
);
|
|
assert.ok(
|
|
spy.notCalled,
|
|
"if the user already has a timezone do not call AJAX update"
|
|
);
|
|
user = User.create({ username: "chuck" });
|
|
assert.equal(
|
|
user.resolvedTimezone(),
|
|
"America/Chicago",
|
|
"if the user has no timezone guess it with moment"
|
|
);
|
|
assert.ok(
|
|
spy.calledWith("/u/chuck.json", {
|
|
type: "PUT",
|
|
dataType: "json",
|
|
data: { timezone: "America/Chicago" }
|
|
}),
|
|
"if the user has no timezone save it with an AJAX update"
|
|
);
|
|
stub.restore();
|
|
});
|