* pretender wasn't catching the request because it ran after this test finished
* restore wasn't needed, we do `sinon.restore()` after each test
The error was:
```
↪ Unit | Model | user::resolvedTimezone [✔]
↪ Unit | Utility | url::routeTo with prefixUnhandled request in test environment: /forum/u/chuck.json (PUT)
Error: Unhandled request in test environment: /forum/u/chuck.json (PUT)
at Pretender.server.unhandledRequest (discourse/tests/setup-tests:173:15)
at Pretender.handleRequest (pretender:400:14)
at FakeRequest.send (pretender:169:21)
at Object.send (jquery:10100:10)
at Function.ajax (jquery:9683:15)
at performAjax (discourse/app/lib/ajax:174:19)
at eval (discourse/app/lib/ajax:183:11)
at invokeCallback (ember:63104:17)
at publish (ember:63087:9)
at eval (ember:57463:16)
[✘]
```
A minimal reproduction:
`http://localhost:3001/qunit?seed=3&testId=da76996b&testId=e52a53e7`
128 lines
3.6 KiB
JavaScript
128 lines
3.6 KiB
JavaScript
import * as ajaxlib from "discourse/lib/ajax";
|
|
import { module, test } from "qunit";
|
|
import Group from "discourse/models/group";
|
|
import User from "discourse/models/user";
|
|
import sinon from "sinon";
|
|
|
|
module("Unit | Model | user", function () {
|
|
test("staff", function (assert) {
|
|
let 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");
|
|
});
|
|
|
|
test("searchContext", function (assert) {
|
|
let user = User.create({ id: 1, username: "EvilTrout" });
|
|
|
|
assert.deepEqual(
|
|
user.get("searchContext"),
|
|
{ type: "user", id: "eviltrout", user: user },
|
|
"has a search context"
|
|
);
|
|
});
|
|
|
|
test("isAllowedToUploadAFile", function (assert) {
|
|
let 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"
|
|
);
|
|
});
|
|
|
|
test("canMangeGroup", function (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);
|
|
group.setProperties({ can_admin_group: true });
|
|
|
|
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"
|
|
);
|
|
});
|
|
|
|
test("resolvedTimezone", function (assert) {
|
|
const tz = "Australia/Brisbane";
|
|
let user = User.create({ timezone: tz, username: "chuck", id: 111 });
|
|
|
|
sinon.stub(moment.tz, "guess").returns("America/Chicago");
|
|
sinon.stub(ajaxlib.ajax);
|
|
let spy = sinon.spy(ajaxlib, "ajax");
|
|
|
|
assert.equal(
|
|
user.resolvedTimezone(user),
|
|
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", id: 111 });
|
|
assert.equal(
|
|
user.resolvedTimezone(user),
|
|
"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"
|
|
);
|
|
|
|
let otherUser = User.create({ username: "howardhamlin", id: 999 });
|
|
assert.equal(
|
|
otherUser.resolvedTimezone(user),
|
|
null,
|
|
"if the user has no timezone and the user is not the current user, do NOT guess with moment"
|
|
);
|
|
assert.not(
|
|
spy.calledWith("/u/howardhamlin.json", {
|
|
type: "PUT",
|
|
dataType: "json",
|
|
data: { timezone: "America/Chicago" },
|
|
}),
|
|
"if the user has no timezone, and the user is not the current user, do NOT save it with an AJAX update"
|
|
);
|
|
});
|
|
|
|
test("muted ids", function (assert) {
|
|
let user = User.create({ username: "chuck", muted_category_ids: [] });
|
|
|
|
assert.deepEqual(user.calculateMutedIds(0, 1, "muted_category_ids"), [1]);
|
|
assert.deepEqual(user.calculateMutedIds(1, 1, "muted_category_ids"), []);
|
|
});
|
|
});
|