This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/tests/acceptance/topic-user-status-test.js
2022-10-04 10:35:27 +04:00

145 lines
4.0 KiB
JavaScript

import {
acceptance,
exists,
publishToMessageBus,
query,
queryAll,
} from "discourse/tests/helpers/qunit-helpers";
import { visit } from "@ember/test-helpers";
import { test } from "qunit";
import TopicFixtures from "discourse/tests/fixtures/topic";
import { cloneJSON } from "discourse-common/lib/object";
acceptance("Topic - User Status", function (needs) {
const status = { emoji: "tooth", description: "off to dentist" };
needs.user();
needs.pretender((server, helper) => {
server.get("/t/299/1.json", () => {
const response = cloneJSON(TopicFixtures["/t/299/1.json"]);
response.post_stream.posts.forEach((post) => {
post.user_status = status;
// we need the poster's name to be different from username
// so when display_name_on_posts = true, both name and username will be shown:
post.name = "Evil T";
});
return helper.response(200, response);
});
});
test("shows user status next to avatar on posts", async function (assert) {
this.siteSettings.enable_user_status = true;
await visit("/t/-/299/1");
assert.equal(
queryAll(".topic-post .user-status-message").length,
3,
"all posts has user status"
);
});
test("shows user status next to avatar on posts when displaying names on posts is enabled", async function (assert) {
this.siteSettings.enable_user_status = true;
this.siteSettings.display_name_on_posts = true;
await visit("/t/-/299/1");
assert.equal(
queryAll(".topic-post .user-status-message").length,
3,
"all posts has user status"
);
});
});
acceptance("Topic - User Status - live updates", function (needs) {
const userId = 1;
const status = { emoji: "tooth", description: "off to dentist" };
needs.user();
needs.pretender((server, helper) => {
server.get("/t/299/1.json", () => {
const response = cloneJSON(TopicFixtures["/t/299/1.json"]);
response.post_stream.posts.forEach((post) => {
post.user_id = userId;
post.user_status = { emoji: "tooth", description: "off to dentist" };
});
return helper.response(200, response);
});
});
test("updating status", async function (assert) {
this.siteSettings.enable_user_status = true;
await visit("/t/-/299/1");
assert.equal(
queryAll(".topic-post .user-status-message").length,
3,
"all posts has user status"
);
assert.ok(
query(".topic-post .user-status-message .emoji").src.includes(
status.emoji
),
"status emoji is correct"
);
const newStatus = { emoji: "surfing_man", description: "surfing" };
await publishToMessageBus(`/user-status`, { [userId]: newStatus });
assert.equal(
queryAll(".topic-post .user-status-message").length,
3,
"all posts has user status"
);
assert.ok(
query(".topic-post .user-status-message .emoji").src.includes(
newStatus.emoji
),
"status emoji is correct"
);
});
test("removing status and setting again", async function (assert) {
this.siteSettings.enable_user_status = true;
await visit("/t/-/299/1");
assert.equal(
queryAll(".topic-post .user-status-message").length,
3,
"all posts has user status"
);
assert.ok(
query(".topic-post .user-status-message .emoji").src.includes(
status.emoji
),
"status emoji is correct"
);
await publishToMessageBus(`/user-status`, { [userId]: null });
assert.notOk(
exists(".topic-post .user-status-message"),
"status on all posts has disappeared"
);
const newStatus = { emoji: "surfing_man", description: "surfing" };
await publishToMessageBus(`/user-status`, { [userId]: newStatus });
assert.equal(
queryAll(".topic-post .user-status-message").length,
3,
"all posts have user status"
);
assert.ok(
query(".topic-post .user-status-message .emoji").src.includes(
newStatus.emoji
),
"status emoji is correct"
);
});
});