mirror of
https://github.com/discourse/discourse.git
synced 2025-05-23 13:31:18 +08:00

* `@ember/owner` instead of `@ember/application` * `discourse-i18n` instead of `I18n` * `{ service } from "@ember/service"` instead of `inject as service`
226 lines
7.0 KiB
JavaScript
226 lines
7.0 KiB
JavaScript
import { getOwner } from "@ember/owner";
|
|
import { click, render } from "@ember/test-helpers";
|
|
import { hbs } from "ember-cli-htmlbars";
|
|
import { module, test } from "qunit";
|
|
import BulkSelectHelper from "discourse/lib/bulk-select-helper";
|
|
import { TOPIC_VISIBILITY_REASONS } from "discourse/lib/constants";
|
|
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
|
|
|
|
const REGULAR_TOPIC_ID = 123;
|
|
const PM_TOPIC_ID = 124;
|
|
const UNLISTED_TOPIC_ID = 125;
|
|
|
|
function createBulkSelectHelper(testThis, opts = {}) {
|
|
const store = getOwner(testThis).lookup("service:store");
|
|
const regularTopic = store.createRecord("topic", {
|
|
id: REGULAR_TOPIC_ID,
|
|
visible: true,
|
|
});
|
|
const pmTopic = store.createRecord("topic", {
|
|
id: PM_TOPIC_ID,
|
|
visible: true,
|
|
archetype: "private_message",
|
|
});
|
|
const unlistedTopic = store.createRecord("topic", {
|
|
id: UNLISTED_TOPIC_ID,
|
|
visibility_reason_id: TOPIC_VISIBILITY_REASONS.manually_unlisted,
|
|
visible: false,
|
|
});
|
|
const topics = [regularTopic, pmTopic, unlistedTopic].filter((t) => {
|
|
if (opts.topicIds) {
|
|
return opts.topicIds.includes(t.id);
|
|
} else {
|
|
return true;
|
|
}
|
|
});
|
|
|
|
const bulkSelectHelper = new BulkSelectHelper(testThis);
|
|
topics.forEach((t) => {
|
|
bulkSelectHelper.selected.addObject(t);
|
|
});
|
|
return bulkSelectHelper;
|
|
}
|
|
|
|
module("Integration | Component | BulkSelectTopicsDropdown", function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
test("actions all topics can perform", async function (assert) {
|
|
this.currentUser.admin = true;
|
|
this.bulkSelectHelper = createBulkSelectHelper(this);
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item")
|
|
.exists({ count: 7 });
|
|
|
|
[
|
|
"update-notifications",
|
|
"reset-bump-dates",
|
|
"close-topics",
|
|
"append-tags",
|
|
"replace-tags",
|
|
"remove-tags",
|
|
"delete-topics",
|
|
].forEach((action) => {
|
|
assert
|
|
.dom(`.fk-d-menu__inner-content .dropdown-menu__item .${action}`)
|
|
.exists();
|
|
});
|
|
});
|
|
|
|
test("does not allow unlisting topics that are already unlisted", async function (assert) {
|
|
this.currentUser.admin = true;
|
|
this.bulkSelectHelper = createBulkSelectHelper(this, {
|
|
topicIds: [UNLISTED_TOPIC_ID],
|
|
});
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .unlist-topics")
|
|
.doesNotExist();
|
|
});
|
|
|
|
test("does not allow relisting topics that are already visible", async function (assert) {
|
|
this.currentUser.admin = true;
|
|
this.bulkSelectHelper = createBulkSelectHelper(this, {
|
|
topicIds: [REGULAR_TOPIC_ID],
|
|
});
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .relist-topics")
|
|
.doesNotExist();
|
|
});
|
|
|
|
test("allows deferring topics if the user has the preference enabled", async function (assert) {
|
|
this.currentUser.admin = true;
|
|
this.currentUser.user_option.enable_defer = true;
|
|
this.bulkSelectHelper = createBulkSelectHelper(this);
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .defer")
|
|
.exists();
|
|
});
|
|
|
|
test("does not allow tagging actions if tagging_enabled is false", async function (assert) {
|
|
this.currentUser.admin = true;
|
|
this.siteSettings.tagging_enabled = false;
|
|
this.bulkSelectHelper = createBulkSelectHelper(this);
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
["append-tags", "replace-tags", "remove-tags"].forEach((action) => {
|
|
assert
|
|
.dom(`.fk-d-menu__inner-content .dropdown-menu__item .${action}`)
|
|
.doesNotExist();
|
|
});
|
|
});
|
|
|
|
test("does not allow tagging actions if user cannot manage topic", async function (assert) {
|
|
this.bulkSelectHelper = createBulkSelectHelper(this);
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
["append-tags", "replace-tags", "remove-tags"].forEach((action) => {
|
|
assert
|
|
.dom(`.fk-d-menu__inner-content .dropdown-menu__item .${action}`)
|
|
.doesNotExist();
|
|
});
|
|
});
|
|
|
|
test("does not allow deleting topics if user is not staff", async function (assert) {
|
|
this.bulkSelectHelper = createBulkSelectHelper(this);
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .delete-topics")
|
|
.doesNotExist();
|
|
});
|
|
|
|
test("does not allow unlisting or relisting PM topics", async function (assert) {
|
|
this.currentUser.admin = true;
|
|
this.bulkSelectHelper = createBulkSelectHelper(this, {
|
|
topicIds: [PM_TOPIC_ID],
|
|
});
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .relist-topics")
|
|
.doesNotExist();
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .unlist-topics")
|
|
.doesNotExist();
|
|
});
|
|
|
|
test("does not allow updating category for PMs", async function (assert) {
|
|
this.currentUser.admin = true;
|
|
this.bulkSelectHelper = createBulkSelectHelper(this, {
|
|
topicIds: [PM_TOPIC_ID],
|
|
});
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .update-category")
|
|
.doesNotExist();
|
|
});
|
|
|
|
test("allows moving to archive and moving to inbox for PMs", async function (assert) {
|
|
this.currentUser.admin = true;
|
|
this.bulkSelectHelper = createBulkSelectHelper(this, {
|
|
topicIds: [PM_TOPIC_ID],
|
|
});
|
|
|
|
await render(
|
|
hbs`<BulkSelectTopicsDropdown @bulkSelectHelper={{this.bulkSelectHelper}} />`
|
|
);
|
|
|
|
await click(".bulk-select-topics-dropdown-trigger");
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .archive-messages")
|
|
.exists();
|
|
assert
|
|
.dom(
|
|
".fk-d-menu__inner-content .dropdown-menu__item .move-messages-to-inbox"
|
|
)
|
|
.exists();
|
|
assert
|
|
.dom(".fk-d-menu__inner-content .dropdown-menu__item .archive-topics")
|
|
.doesNotExist();
|
|
});
|
|
});
|