From f54d6da6092a685f3dbbb211d7fb13c0d81bc188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Saquetim?= Date: Tue, 12 Nov 2024 00:45:41 -0300 Subject: [PATCH] Added tests with the glimmer post menu enabled --- .../discourse/components/assign-button.gjs | 2 +- .../acceptance/assign-enabled-test.js | 19 +- .../assign-enabled-widget-post-menu-test.js | 350 ++++++++++++++++++ 3 files changed, 364 insertions(+), 7 deletions(-) create mode 100644 test/javascripts/acceptance/assign-enabled-widget-post-menu-test.js diff --git a/assets/javascripts/discourse/components/assign-button.gjs b/assets/javascripts/discourse/components/assign-button.gjs index ba2c4264..63c0915a 100644 --- a/assets/javascripts/discourse/components/assign-button.gjs +++ b/assets/javascripts/discourse/components/assign-button.gjs @@ -41,8 +41,8 @@ export default class AssignButton extends Component { { server.get("/assign/suggestions", () => { @@ -52,7 +52,7 @@ acceptance("Discourse Assign | Assign desktop", function (needs) { needs.user({ can_assign: true, }); - needs.settings({ assign_enabled: true }); + needs.settings({ glimmer_post_menu_mode: "enabled", assign_enabled: true }); needs.pretender((server, helper) => { server.get("/assign/suggestions", () => { @@ -77,15 +77,15 @@ acceptance("Discourse Assign | Assign desktop", function (needs) { await visit("/t/internationalization-localization/280"); assert - .dom("#post_2 .extra-buttons .d-icon-user-plus") + .dom("#post_2 .post-action-menu__assign-post") .doesNotExist("assign to post button is hidden"); await click("#post_2 button.show-more-actions"); assert - .dom("#post_2 .extra-buttons .d-icon-user-plus") + .dom("#post_2 .post-action-menu__assign-post") .exists("assign to post button exists"); - await click("#post_2 .extra-buttons .d-icon-user-plus"); + await click("#post_2 .post-action-menu__assign-post"); assert.dom(".assign.d-modal").exists("assign modal opens"); const menu = selectKit(".assign.d-modal .user-chooser"); @@ -126,6 +126,7 @@ acceptance("Discourse Assign | Assign Status enabled", function (needs) { can_assign: true, }); needs.settings({ + glimmer_post_menu_mode: "enabled", assign_enabled: true, enable_assign_status: true, assign_statuses: "New|In Progress|Done", @@ -187,7 +188,11 @@ acceptance("Discourse Assign | Assign Status disabled", function (needs) { needs.user({ can_assign: true, }); - needs.settings({ assign_enabled: true, enable_assign_status: false }); + needs.settings({ + glimmer_post_menu_mode: "enabled", + assign_enabled: true, + enable_assign_status: false, + }); needs.pretender((server, helper) => { server.get("/assign/suggestions", () => { @@ -245,6 +250,7 @@ const remindersFrequency = [ acceptance("Discourse Assign | User preferences", function (needs) { needs.user({ can_assign: true, reminders_frequency: remindersFrequency }); needs.settings({ + glimmer_post_menu_mode: "enabled", assign_enabled: true, remind_assigns_frequency: 43200, }); @@ -291,6 +297,7 @@ acceptance( function (needs) { needs.user({ can_assign: true, reminders_frequency: remindersFrequency }); needs.settings({ + glimmer_post_menu_mode: "enabled", assign_enabled: true, remind_assigns_frequency: 43200, }); diff --git a/test/javascripts/acceptance/assign-enabled-widget-post-menu-test.js b/test/javascripts/acceptance/assign-enabled-widget-post-menu-test.js new file mode 100644 index 00000000..1b0e7363 --- /dev/null +++ b/test/javascripts/acceptance/assign-enabled-widget-post-menu-test.js @@ -0,0 +1,350 @@ +import { click, fillIn, visit } from "@ember/test-helpers"; +import { test } from "qunit"; +import userFixtures from "discourse/tests/fixtures/user-fixtures"; +import pretender, { + parsePostData, + response, +} from "discourse/tests/helpers/create-pretender"; +import { + acceptance, + updateCurrentUser, +} from "discourse/tests/helpers/qunit-helpers"; +import selectKit from "discourse/tests/helpers/select-kit-helper"; +import { cloneJSON } from "discourse-common/lib/object"; + +acceptance( + "Discourse Assign | Widget Post Menu | Assign mobile", + function (needs) { + needs.user(); + needs.mobileView(); + needs.settings({ + glimmer_post_menu_mode: "disabled", + assign_enabled: true, + }); + + needs.pretender((server, helper) => { + server.get("/assign/suggestions", () => { + return helper.response({ + success: true, + assign_allowed_groups: false, + assign_allowed_for_groups: [], + suggestions: [ + { + id: 19, + username: "eviltrout", + name: "Robin Ward", + avatar_template: + "/user_avatar/meta.discourse.org/eviltrout/{size}/5275_2.png", + }, + ], + }); + }); + }); + + test("Footer dropdown contains button", async function (assert) { + updateCurrentUser({ can_assign: true }); + await visit("/t/internationalization-localization/280"); + const menu = selectKit(".topic-footer-mobile-dropdown"); + await menu.expand(); + + assert.true(menu.rowByValue("assign").exists()); + await menu.selectRowByValue("assign"); + assert.dom(".assign.d-modal").exists("assign modal opens"); + }); + } +); + +acceptance( + "Discourse Assign | Widget Post Menu | Assign desktop", + function (needs) { + needs.user({ + can_assign: true, + }); + needs.settings({ + glimmer_post_menu_mode: "disabled", + assign_enabled: true, + }); + + needs.pretender((server, helper) => { + server.get("/assign/suggestions", () => { + return helper.response({ + success: true, + assign_allowed_groups: false, + assign_allowed_for_groups: [], + suggestions: [ + { + id: 19, + username: "eviltrout", + name: "Robin Ward", + avatar_template: + "/user_avatar/meta.discourse.org/eviltrout/{size}/5275_2.png", + }, + ], + }); + }); + }); + + test("Assigning user to a post", async function (assert) { + await visit("/t/internationalization-localization/280"); + + assert + .dom("#post_2 .extra-buttons .d-icon-user-plus") + .doesNotExist("assign to post button is hidden"); + + await click("#post_2 button.show-more-actions"); + assert + .dom("#post_2 .extra-buttons .d-icon-user-plus") + .exists("assign to post button exists"); + + await click("#post_2 .extra-buttons .d-icon-user-plus"); + assert.dom(".assign.d-modal").exists("assign modal opens"); + + const menu = selectKit(".assign.d-modal .user-chooser"); + assert.true(menu.isExpanded(), "user selector is expanded"); + + await click(".assign.d-modal .btn-primary"); + assert.dom(".error-label").includesText("Choose a user to assign"); + + await menu.expand(); + await menu.selectRowByIndex(0); + assert.strictEqual(menu.header().value(), "eviltrout"); + assert.dom(".error-label").doesNotExist(); + + pretender.put("/assign/assign", ({ requestBody }) => { + const body = parsePostData(requestBody); + assert.strictEqual(body.target_type, "Post"); + assert.strictEqual(body.username, "eviltrout"); + assert.strictEqual(body.note, "a note!"); + return response({ success: true }); + }); + + await fillIn("#assign-modal-note", "a note!"); + await click(".assign.d-modal .btn-primary"); + + assert.dom(".assign.d-modal").doesNotExist("assign modal closes"); + }); + + test("Footer dropdown contains button", async function (assert) { + await visit("/t/internationalization-localization/280"); + await click("#topic-footer-button-assign"); + + assert.dom(".assign.d-modal").exists("assign modal opens"); + }); + } +); + +acceptance( + "Discourse Assign | Widget Post Menu | Assign Status enabled", + function (needs) { + needs.user({ + can_assign: true, + }); + needs.settings({ + glimmer_post_menu_mode: "disabled", + assign_enabled: true, + enable_assign_status: true, + assign_statuses: "New|In Progress|Done", + }); + + needs.pretender((server, helper) => { + server.get("/assign/suggestions", () => { + return helper.response({ + success: true, + assign_allowed_groups: false, + assign_allowed_for_groups: [], + suggestions: [ + { + id: 19, + username: "eviltrout", + name: "Robin Ward", + avatar_template: + "/user_avatar/meta.discourse.org/eviltrout/{size}/5275_2.png", + }, + ], + }); + }); + }); + + test("Modal contains status dropdown", async function (assert) { + pretender.put("/assign/assign", ({ requestBody }) => { + const body = parsePostData(requestBody); + assert.strictEqual(body.target_type, "Topic"); + assert.strictEqual(body.target_id, "280"); + assert.strictEqual(body.username, "eviltrout"); + assert.strictEqual(body.status, "In Progress"); + + return response({ success: true }); + }); + + await visit("/t/internationalization-localization/280"); + await click("#topic-footer-button-assign"); + + assert + .dom(".assign.d-modal #assign-status") + .exists("assign status dropdown exists"); + + const statusDropdown = selectKit("#assign-status"); + assert.strictEqual(statusDropdown.header().value(), "New"); + + await statusDropdown.expand(); + await statusDropdown.selectRowByValue("In Progress"); + assert.strictEqual(statusDropdown.header().value(), "In Progress"); + + const menu = selectKit(".assign.d-modal .user-chooser"); + await menu.expand(); + await menu.selectRowByIndex(0); + + await click(".assign.d-modal .btn-primary"); + }); + } +); + +acceptance( + "Discourse Assign | Widget Post Menu | Assign Status disabled", + function (needs) { + needs.user({ + can_assign: true, + }); + needs.settings({ + glimmer_post_menu_mode: "disabled", + assign_enabled: true, + enable_assign_status: false, + }); + + needs.pretender((server, helper) => { + server.get("/assign/suggestions", () => { + return helper.response({ + success: true, + assign_allowed_groups: false, + assign_allowed_for_groups: [], + suggestions: [ + { + id: 19, + username: "eviltrout", + name: "Robin Ward", + avatar_template: + "/user_avatar/meta.discourse.org/eviltrout/{size}/5275_2.png", + }, + ], + }); + }); + }); + + test("Modal contains status dropdown", async function (assert) { + await visit("/t/internationalization-localization/280"); + await click("#topic-footer-button-assign"); + + assert + .dom(".assign.d-modal #assign-status") + .doesNotExist("assign status dropdown doesn't exists"); + }); + } +); + +// See RemindAssignsFrequencySiteSettings +const remindersFrequency = [ + { + name: "discourse_assign.reminders_frequency.never", + value: 0, + }, + { + name: "discourse_assign.reminders_frequency.daily", + value: 1440, + }, + { + name: "discourse_assign.reminders_frequency.weekly", + value: 10080, + }, + { + name: "discourse_assign.reminders_frequency.monthly", + value: 43200, + }, + { + name: "discourse_assign.reminders_frequency.quarterly", + value: 129600, + }, +]; + +acceptance( + "Discourse Assign | Widget Post Menu | User preferences", + function (needs) { + needs.user({ can_assign: true, reminders_frequency: remindersFrequency }); + needs.settings({ + glimmer_post_menu_mode: "disabled", + assign_enabled: true, + remind_assigns_frequency: 43200, + }); + + test("The frequency for assigned topic reminders defaults to the site setting", async function (assert) { + await visit("/u/eviltrout/preferences/notifications"); + + assert.strictEqual( + selectKit("#remind-assigns-frequency").header().value(), + "43200", + "set frequency to default of Monthly" + ); + }); + + test("The user can change the frequency to Never", async function (assert) { + await visit("/u/eviltrout/preferences/notifications"); + + await selectKit("#remind-assigns-frequency").expand(); + await selectKit("#remind-assigns-frequency").selectRowByValue(0); + + assert.strictEqual( + selectKit("#remind-assigns-frequency").header().value(), + "0", + "set frequency to Never" + ); + }); + + test("The user can change the frequency to some other non-default value", async function (assert) { + await visit("/u/eviltrout/preferences/notifications"); + + await selectKit("#remind-assigns-frequency").expand(); + await selectKit("#remind-assigns-frequency").selectRowByValue(10080); // weekly + + assert.strictEqual( + selectKit("#remind-assigns-frequency").header().value(), + "10080", + "set frequency to Weekly" + ); + }); + } +); + +acceptance( + "Discourse Assign | Widget Post Menu | User preferences | Pre-selected reminder frequency", + function (needs) { + needs.user({ can_assign: true, reminders_frequency: remindersFrequency }); + needs.settings({ + glimmer_post_menu_mode: "disabled", + assign_enabled: true, + remind_assigns_frequency: 43200, + }); + + needs.pretender((server, helper) => { + server.get("/u/eviltrout.json", () => { + let json = cloneJSON(userFixtures["/u/eviltrout.json"]); + json.user.custom_fields = { remind_assigns_frequency: 10080 }; + + // usually this is done automatically by this pretender but we + // have to do it manually here because we are overriding the + // pretender see app/assets/javascripts/discourse/tests/helpers/create-pretender.js + json.user.can_edit = true; + + return helper.response(200, json); + }); + }); + + test("The user's previously selected value is loaded", async function (assert) { + await visit("/u/eviltrout/preferences/notifications"); + + assert.strictEqual( + selectKit("#remind-assigns-frequency").header().value(), + "10080", + "frequency is pre-selected to Weekly" + ); + }); + } +);