284 lines
7.8 KiB
JavaScript
284 lines
7.8 KiB
JavaScript
import componentTest, {
|
|
setupRenderingTest,
|
|
} from "discourse/tests/helpers/component-test";
|
|
import I18n from "I18n";
|
|
import Topic from "discourse/models/topic";
|
|
import {
|
|
discourseModule,
|
|
queryAll,
|
|
} from "discourse/tests/helpers/qunit-helpers";
|
|
import hbs from "htmlbars-inline-precompile";
|
|
import selectKit from "discourse/tests/helpers/select-kit-helper";
|
|
|
|
const buildTopic = function (opts) {
|
|
return Topic.create({
|
|
id: 4563,
|
|
}).updateFromJson({
|
|
title: "Qunit Test Topic",
|
|
details: {
|
|
notification_level: opts.level,
|
|
notifications_reason_id: opts.reason || null,
|
|
},
|
|
archetype: opts.archetype || "regular",
|
|
category_id: opts.category_id || null,
|
|
tags: opts.tags || [],
|
|
});
|
|
};
|
|
|
|
const originalTranslation =
|
|
I18n.translations.en.js.topic.notifications.tracking_pm.title;
|
|
|
|
discourseModule(
|
|
"Integration | Component | select-kit/topic-notifications-button",
|
|
function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
hooks.afterEach(function () {
|
|
I18n.translations.en.js.topic.notifications.tracking_pm.title = originalTranslation;
|
|
});
|
|
|
|
componentTest("the header has a localized title", {
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.set("topic", buildTopic({ level: 1 }));
|
|
},
|
|
|
|
async test(assert) {
|
|
assert.strictEqual(
|
|
selectKit().header().label(),
|
|
"Normal",
|
|
"it has the correct label"
|
|
);
|
|
|
|
await this.set("topic", buildTopic({ level: 2 }));
|
|
|
|
assert.strictEqual(
|
|
selectKit().header().label(),
|
|
"Tracking",
|
|
"it correctly changes the label"
|
|
);
|
|
},
|
|
});
|
|
|
|
componentTest("the header has a localized title", {
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
I18n.translations.en.js.topic.notifications.tracking_pm.title = `${originalTranslation} PM`;
|
|
this.set(
|
|
"topic",
|
|
buildTopic({ level: 2, archetype: "private_message" })
|
|
);
|
|
},
|
|
|
|
test(assert) {
|
|
assert.strictEqual(
|
|
selectKit().header().label(),
|
|
`${originalTranslation} PM`,
|
|
"it has the correct label for PMs"
|
|
);
|
|
},
|
|
});
|
|
|
|
componentTest("notification reason text - user mailing list mode", {
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.currentUser.set("mailing_list_mode", true);
|
|
this.set("topic", buildTopic({ level: 2 }));
|
|
},
|
|
|
|
test(assert) {
|
|
assert.strictEqual(
|
|
queryAll(".topic-notifications-button .text").text(),
|
|
I18n.t("topic.notifications.reasons.mailing_list_mode"),
|
|
"mailing_list_mode enabled for the user shows unique text"
|
|
);
|
|
},
|
|
});
|
|
|
|
componentTest("notification reason text - bad notification reason", {
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.set("topic", buildTopic({ level: 2 }));
|
|
},
|
|
|
|
test(assert) {
|
|
this.set("topic", buildTopic({ level: 3, reason: 999 }));
|
|
|
|
assert.strictEqual(
|
|
queryAll(".topic-notifications-button .text").text(),
|
|
I18n.t("topic.notifications.reasons.3"),
|
|
"fallback to regular level translation if reason does not exist"
|
|
);
|
|
},
|
|
});
|
|
|
|
componentTest("notification reason text - user tracking category", {
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.currentUser.set("tracked_category_ids", [88]);
|
|
this.set("topic", buildTopic({ level: 2, reason: 8, category_id: 88 }));
|
|
},
|
|
|
|
test(assert) {
|
|
assert.strictEqual(
|
|
queryAll(".topic-notifications-button .text").text(),
|
|
I18n.t("topic.notifications.reasons.2_8"),
|
|
"use 2_8 notification if user is still tracking category"
|
|
);
|
|
},
|
|
});
|
|
|
|
componentTest(
|
|
"notification reason text - user no longer tracking category",
|
|
{
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.currentUser.set("tracked_category_ids", []);
|
|
this.set(
|
|
"topic",
|
|
buildTopic({ level: 2, reason: 8, category_id: 88 })
|
|
);
|
|
},
|
|
|
|
test(assert) {
|
|
assert.strictEqual(
|
|
queryAll(".topic-notifications-button .text").text(),
|
|
I18n.t("topic.notifications.reasons.2_8_stale"),
|
|
"use _stale notification if user is no longer tracking category"
|
|
);
|
|
},
|
|
}
|
|
);
|
|
|
|
componentTest("notification reason text - user watching category", {
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.currentUser.set("watched_category_ids", [88]);
|
|
this.set("topic", buildTopic({ level: 3, reason: 6, category_id: 88 }));
|
|
},
|
|
|
|
test(assert) {
|
|
assert.strictEqual(
|
|
queryAll(".topic-notifications-button .text").text(),
|
|
I18n.t("topic.notifications.reasons.3_6"),
|
|
"use 3_6 notification if user is still watching category"
|
|
);
|
|
},
|
|
});
|
|
|
|
componentTest(
|
|
"notification reason text - user no longer watching category",
|
|
{
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.currentUser.set("watched_category_ids", []);
|
|
this.set(
|
|
"topic",
|
|
buildTopic({ level: 3, reason: 6, category_id: 88 })
|
|
);
|
|
},
|
|
|
|
test(assert) {
|
|
assert.strictEqual(
|
|
queryAll(".topic-notifications-button .text").text(),
|
|
I18n.t("topic.notifications.reasons.3_6_stale"),
|
|
"use _stale notification if user is no longer watching category"
|
|
);
|
|
},
|
|
}
|
|
);
|
|
|
|
componentTest("notification reason text - user watching tag", {
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.currentUser.set("watched_tags", ["test"]);
|
|
this.set("topic", buildTopic({ level: 3, reason: 10, tags: ["test"] }));
|
|
},
|
|
|
|
test(assert) {
|
|
assert.strictEqual(
|
|
queryAll(".topic-notifications-button .text").text(),
|
|
I18n.t("topic.notifications.reasons.3_10"),
|
|
"use 3_10 notification if user is still watching tag"
|
|
);
|
|
},
|
|
});
|
|
|
|
componentTest("notification reason text - user no longer watching tag", {
|
|
template: hbs`
|
|
{{topic-notifications-button
|
|
notificationLevel=topic.details.notification_level
|
|
topic=topic
|
|
}}
|
|
`,
|
|
|
|
beforeEach() {
|
|
this.currentUser.set("watched_tags", []);
|
|
this.set("topic", buildTopic({ level: 3, reason: 10, tags: ["test"] }));
|
|
},
|
|
|
|
test(assert) {
|
|
assert.strictEqual(
|
|
queryAll(".topic-notifications-button .text").text(),
|
|
I18n.t("topic.notifications.reasons.3_10_stale"),
|
|
"use _stale notification if user is no longer watching tag"
|
|
);
|
|
},
|
|
});
|
|
}
|
|
);
|