From 959525b079411a9e142be899d4477378e24d1225 Mon Sep 17 00:00:00 2001 From: Alan Guo Xiang Tan Date: Thu, 26 May 2022 09:13:40 +0800 Subject: [PATCH] FEATURE: Register assigned link under sidebar topics section. (#341) --- .../discourse/initializers/assign-sidebar.js | 41 +++++++++++ config/locales/client.en.yml | 3 + .../acceptance/assign-sidebar-test.js | 71 +++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 assets/javascripts/discourse/initializers/assign-sidebar.js create mode 100644 test/javascripts/acceptance/assign-sidebar-test.js diff --git a/assets/javascripts/discourse/initializers/assign-sidebar.js b/assets/javascripts/discourse/initializers/assign-sidebar.js new file mode 100644 index 0000000..49543a3 --- /dev/null +++ b/assets/javascripts/discourse/initializers/assign-sidebar.js @@ -0,0 +1,41 @@ +import { withPluginApi } from "discourse/lib/plugin-api"; +import I18n from "I18n"; + +export default { + name: "assign-sidebar", + + initialize(container) { + withPluginApi("1.2.0", (api) => { + const currentUser = container.lookup("current-user:main"); + + if ( + currentUser?.experimental_sidebar_enabled && + currentUser?.can_assign + ) { + api.addTopicsSectionLink((baseSectionLink) => { + return class AssignedSectionLink extends baseSectionLink { + get name() { + return "assigned"; + } + + get route() { + return "userActivity.assigned"; + } + + get model() { + return this.currentUser; + } + + get title() { + return I18n.t("sidebar.assigned_link_title"); + } + + get text() { + return I18n.t("sidebar.assigned_link_text"); + } + }; + }); + } + }); + }, +}; diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index e3cdd88..c4372c4 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -135,3 +135,6 @@ en: assigned: "%{username} assigned you" titles: assigned: "Assigned" + sidebar: + assigned_link_title: "Topics assigned to you" + assigned_link_text: "Assigned" diff --git a/test/javascripts/acceptance/assign-sidebar-test.js b/test/javascripts/acceptance/assign-sidebar-test.js new file mode 100644 index 0000000..3bcd8f7 --- /dev/null +++ b/test/javascripts/acceptance/assign-sidebar-test.js @@ -0,0 +1,71 @@ +import I18n from "I18n"; + +import { click, currentURL, visit } from "@ember/test-helpers"; + +import { + acceptance, + conditionalTest, + exists, + query, +} from "discourse/tests/helpers/qunit-helpers"; +import { isLegacyEmber } from "discourse-common/config/environment"; +import AssignedTopics from "../fixtures/assigned-topics-fixtures"; +import { cloneJSON } from "discourse-common/lib/object"; + +acceptance( + "Discourse Assign | Sidebar when user cannot assign", + function (needs) { + needs.user({ experimental_sidebar_enabled: true, can_assign: false }); + + conditionalTest( + "assign sidebar link is hidden", + !isLegacyEmber(), + async function (assert) { + await visit("/"); + + assert.ok( + !exists(".sidebar-section-link-assigned"), + "it does not display the assign link in sidebar" + ); + } + ); + } +); + +acceptance("Discourse Assign | Sidebar when user can assign", function (needs) { + needs.user({ experimental_sidebar_enabled: true, can_assign: true }); + + needs.pretender((server, helper) => { + const messagesPath = "/topics/messages-assigned/eviltrout.json"; + const assigns = AssignedTopics[messagesPath]; + server.get(messagesPath, () => helper.response(cloneJSON(assigns))); + }); + + conditionalTest( + "clicking on assign link", + !isLegacyEmber(), + async function (assert) { + await visit("/"); + + assert.strictEqual( + query(".sidebar-section-link-assigned").textContent.trim(), + I18n.t("sidebar.assigned_link_text"), + "displays the right text for the link" + ); + + assert.strictEqual( + query(".sidebar-section-link-assigned").title, + I18n.t("sidebar.assigned_link_title"), + "displays the right title for the link" + ); + + await click(".sidebar-section-link-assigned"); + + assert.strictEqual( + currentURL(), + "/u/eviltrout/activity/assigned", + "it navigates to the right page" + ); + } + ); +});