mirror of
https://github.com/discourse/discourse.git
synced 2024-12-12 15:33:55 +08:00
bc0ef9f7ee
Prior to this change, only mentions would get a notification and a sound. This change will not create a notification for this case, but will play a sound. This is still respecting notification settings, not playing the sound when you are viewing the channel or not following it. --------- Co-authored-by: Régis Hanol <regis@hanol.fr>
120 lines
3.6 KiB
JavaScript
120 lines
3.6 KiB
JavaScript
import { getOwner } from "@ember/application";
|
|
import { test } from "qunit";
|
|
import {
|
|
acceptance,
|
|
updateCurrentUser,
|
|
} from "discourse/tests/helpers/qunit-helpers";
|
|
import ChatFabricators from "discourse/plugins/chat/discourse/lib/fabricators";
|
|
|
|
function buildDirectMessageChannel(owner) {
|
|
const channel = new ChatFabricators(owner).directMessageChannel();
|
|
buildMembership(channel);
|
|
return channel;
|
|
}
|
|
function buildCategoryMessageChannel(owner) {
|
|
const channel = new ChatFabricators(owner).channel();
|
|
buildMembership(channel);
|
|
return channel;
|
|
}
|
|
|
|
function buildMembership(channel) {
|
|
channel.currentUserMembership = {
|
|
following: true,
|
|
desktop_notification_level: "always",
|
|
muted: false,
|
|
};
|
|
return channel;
|
|
}
|
|
|
|
acceptance(
|
|
"Discourse Chat | Unit | Service | chat-channel-notification-sound",
|
|
function (needs) {
|
|
needs.hooks.beforeEach(function () {
|
|
Object.defineProperty(this, "subject", {
|
|
get: () =>
|
|
this.container.lookup("service:chat-channel-notification-sound"),
|
|
});
|
|
|
|
Object.defineProperty(this, "site", {
|
|
get: () => this.container.lookup("service:site"),
|
|
});
|
|
|
|
Object.defineProperty(this, "chat", {
|
|
get: () => this.container.lookup("service:chat"),
|
|
});
|
|
|
|
updateCurrentUser({ chat_sound: "ding" });
|
|
});
|
|
|
|
needs.user();
|
|
|
|
test("in do not disturb", async function (assert) {
|
|
updateCurrentUser({ do_not_disturb_until: moment().add(1, "hour") });
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
|
|
test("no chat sound", async function (assert) {
|
|
updateCurrentUser({ chat_sound: null });
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
|
|
test("mobile", async function (assert) {
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
this.site.mobileView = true;
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
|
|
test("plays sound", async function (assert) {
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
|
|
assert.deepEqual(await this.subject.play(channel), true);
|
|
});
|
|
|
|
test("muted", async function (assert) {
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
channel.currentUserMembership.muted = true;
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
|
|
test("not following", async function (assert) {
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
channel.currentUserMembership.following = false;
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
|
|
test("no notification", async function (assert) {
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
channel.currentUserMembership.desktopNotificationLevel = "never";
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
|
|
test("currently active channel", async function (assert) {
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
this.chat.activeChannel = channel;
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
|
|
test("category channel", async function (assert) {
|
|
const channel = buildCategoryMessageChannel(getOwner(this));
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
|
|
test("group", async function (assert) {
|
|
const channel = buildDirectMessageChannel(getOwner(this));
|
|
channel.chatable.group = true;
|
|
|
|
assert.deepEqual(await this.subject.play(channel), false);
|
|
});
|
|
}
|
|
);
|