mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 15:13:43 +08:00
12d4d51d81
* This is to prevent user's timezones being changed accidentally e.g. by admin looking at a user * This problem only occurred via the user card, however the user card was still calling userTimezone even if the setting to display user time in card was disabled
148 lines
4.0 KiB
JavaScript
148 lines
4.0 KiB
JavaScript
import { acceptance } from "helpers/qunit-helpers";
|
|
import DiscourseURL from "discourse/lib/url";
|
|
|
|
import pretender from "helpers/create-pretender";
|
|
import userFixtures from "fixtures/user_fixtures";
|
|
import User from "discourse/models/user";
|
|
|
|
acceptance("User Card - Show Local Time", {
|
|
loggedIn: true,
|
|
settings: { display_local_time_in_user_card: true }
|
|
});
|
|
|
|
QUnit.test("user card local time", async assert => {
|
|
User.current().changeTimezone("Australia/Brisbane");
|
|
let cardResponse = _.clone(userFixtures["/u/eviltrout/card.json"]);
|
|
cardResponse.user.timezone = "Australia/Perth";
|
|
|
|
pretender.get("/u/eviltrout/card.json", () => [
|
|
200,
|
|
{ "Content-Type": "application/json" },
|
|
cardResponse
|
|
]);
|
|
|
|
await visit("/t/internationalization-localization/280");
|
|
assert.ok(invisible(".user-card"), "user card is invisible by default");
|
|
await click("a[data-user-card=eviltrout]:first");
|
|
|
|
let expectedTime = moment
|
|
.tz("Australia/Brisbane")
|
|
.add(-2, "hours")
|
|
.format("h:mm a");
|
|
|
|
assert.ok(visible(".user-card"), "card should appear");
|
|
assert.equal(
|
|
find(".user-card .local-time")
|
|
.text()
|
|
.trim(),
|
|
expectedTime,
|
|
"user card contains the user's local time"
|
|
);
|
|
|
|
cardResponse = _.clone(userFixtures["/u/charlie/card.json"]);
|
|
cardResponse.user.timezone = "America/New_York";
|
|
|
|
pretender.get("/u/charlie/card.json", () => [
|
|
200,
|
|
{ "Content-Type": "application/json" },
|
|
cardResponse
|
|
]);
|
|
|
|
await click("a[data-user-card=charlie]:first");
|
|
|
|
expectedTime = moment
|
|
.tz("Australia/Brisbane")
|
|
.add(-14, "hours")
|
|
.format("h:mm a");
|
|
|
|
assert.equal(
|
|
find(".user-card .local-time")
|
|
.text()
|
|
.trim(),
|
|
expectedTime,
|
|
"opening another user card updates the local time in the card (no caching)"
|
|
);
|
|
});
|
|
|
|
QUnit.test(
|
|
"user card local time - does not update timezone for another user",
|
|
async assert => {
|
|
User.current().changeTimezone("Australia/Brisbane");
|
|
let cardResponse = _.clone(userFixtures["/u/charlie/card.json"]);
|
|
delete cardResponse.user.timezone;
|
|
|
|
pretender.get("/u/charlie/card.json", () => [
|
|
200,
|
|
{ "Content-Type": "application/json" },
|
|
cardResponse
|
|
]);
|
|
|
|
await visit("/t/internationalization-localization/280");
|
|
await click("a[data-user-card=charlie]:first");
|
|
|
|
assert.not(
|
|
exists(".user-card .local-time"),
|
|
"it does not show the local time if the user card returns a null/undefined timezone for another user"
|
|
);
|
|
}
|
|
);
|
|
|
|
acceptance("User Card", { loggedIn: true });
|
|
|
|
QUnit.test("user card", async assert => {
|
|
await visit("/t/internationalization-localization/280");
|
|
assert.ok(invisible(".user-card"), "user card is invisible by default");
|
|
|
|
await click("a[data-user-card=eviltrout]:first");
|
|
assert.ok(visible(".user-card"), "card should appear");
|
|
assert.equal(
|
|
find(".user-card .username")
|
|
.text()
|
|
.trim(),
|
|
"eviltrout",
|
|
"user card contains the data"
|
|
);
|
|
|
|
sandbox.stub(DiscourseURL, "routeTo");
|
|
await click(".card-content a.user-profile-link");
|
|
assert.ok(
|
|
DiscourseURL.routeTo.calledWith("/u/eviltrout"),
|
|
"it should navigate to the user profile"
|
|
);
|
|
|
|
await click("a[data-user-card=charlie]:first");
|
|
assert.ok(visible(".user-card"), "card should appear");
|
|
assert.equal(
|
|
find(".user-card .username")
|
|
.text()
|
|
.trim(),
|
|
"charlie",
|
|
"user card contains the data"
|
|
);
|
|
|
|
assert.ok(
|
|
!visible(".user-card .local-time"),
|
|
"local time with zone does not show by default"
|
|
);
|
|
|
|
await click(".card-content .compose-pm button");
|
|
assert.ok(
|
|
invisible(".user-card"),
|
|
"user card dismissed after hitting Message button"
|
|
);
|
|
|
|
const mention = find("a.mention");
|
|
const icon = document.createElement("span");
|
|
icon.classList.add("icon");
|
|
mention.append(icon);
|
|
await click("a.mention .icon");
|
|
assert.ok(visible(".user-card"), "card should appear");
|
|
assert.equal(
|
|
find(".user-card .username")
|
|
.text()
|
|
.trim(),
|
|
"eviltrout",
|
|
"user card contains the data"
|
|
);
|
|
});
|