From b339d67401a4f5efd58d8127a0ee636961a6229d Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Thu, 6 Jun 2019 10:47:10 +0200 Subject: [PATCH] DEV: refactors select-kit helper to prevent it to leak into global state (#7708) --- .eslintrc | 6 - .../acceptance/details-button-test.js.es6 | 1 + .../display-poll-builder-button.js.es6 | 2 + .../acceptance/admin-suspend-user-test.js.es6 | 1 + .../acceptance/category-chooser-test.js.es6 | 1 + .../category-edit-security-test.js.es6 | 1 + .../acceptance/category-edit-test.js.es6 | 1 + .../acceptance/composer-actions-test.js.es6 | 1 + .../acceptance/composer-test.js.es6 | 1 + .../composer-uncategorized-test.js.es6 | 1 + .../acceptance/dashboard-test.js.es6 | 1 + test/javascripts/acceptance/group-test.js.es6 | 5 +- .../acceptance/new-topic-test.js.es6 | 1 + .../acceptance/preferences-test.js.es6 | 17 +- .../javascripts/acceptance/review-test.js.es6 | 1 + .../acceptance/search-full-test.js.es6 | 2 + .../javascripts/acceptance/search-test.js.es6 | 1 + .../share-and-invite-mobile-test.js.es6 | 1 + .../acceptance/shared-drafts-test.js.es6 | 1 + .../acceptance/tag-groups-test.js.es6 | 1 + .../acceptance/topic-edit-timer-test.js.es6 | 2 + .../topic-footer-buttons-mobile-test.js.es6 | 1 + .../topic-notifications-button-test.js.es6 | 2 + test/javascripts/acceptance/topic-test.js.es6 | 1 + .../components/group-list-setting-test.js.es6 | 1 + .../categories-admin-dropdown-test.js.es6 | 1 + .../components/category-chooser-test.js.es6 | 1 + .../components/category-drop-test.js.es6 | 1 + .../components/category-selector-test.js.es6 | 1 + .../components/combo-box-test.js.es6 | 2 + .../components/list-setting-test.js.es6 | 1 + .../components/mini-tag-chooser-test.js.es6 | 1 + .../components/multi-select-test.js.es6 | 1 + .../components/pinned-options-test.js.es6 | 1 + .../components/single-select-test.js.es6 | 1 + .../components/tag-drop-test.js.es6 | 1 + .../topic-footer-mobile-dropdown-test.js.es6 | 1 + .../topic-notifications-button-test.js.es6 | 1 + .../topic-notifications-options-test.js.es6 | 1 + .../components/value-list-test.js.es6 | 1 + test/javascripts/helpers/select-kit-helper.js | 290 ------------------ .../helpers/select-kit-helper.js.es6 | 245 +++++++++++++++ test/javascripts/test_helper.js | 1 - 43 files changed, 299 insertions(+), 307 deletions(-) delete mode 100644 test/javascripts/helpers/select-kit-helper.js create mode 100644 test/javascripts/helpers/select-kit-helper.js.es6 diff --git a/.eslintrc b/.eslintrc index e5a36abd281..0086b7fc336 100644 --- a/.eslintrc +++ b/.eslintrc @@ -53,12 +53,6 @@ "requirejs": true, "RSVP": true, "sandbox": true, - "selectKit": true, - "selectKitFillInFilter": true, - "selectKitSelectNoneRow": true, - "selectKitSelectRowByIndex": true, - "selectKitSelectRowByName": true, - "selectKitSelectRowByValue": true, "sinon": true, "test": true, "triggerEvent": true, diff --git a/plugins/discourse-details/test/javascripts/acceptance/details-button-test.js.es6 b/plugins/discourse-details/test/javascripts/acceptance/details-button-test.js.es6 index 08922bd8625..6119ef1a4fe 100644 --- a/plugins/discourse-details/test/javascripts/acceptance/details-button-test.js.es6 +++ b/plugins/discourse-details/test/javascripts/acceptance/details-button-test.js.es6 @@ -1,5 +1,6 @@ import { acceptance } from "helpers/qunit-helpers"; import { clearPopupMenuOptionsCallback } from "discourse/controllers/composer"; +import selectKit from "helpers/select-kit-helper"; acceptance("Details Button", { loggedIn: true, diff --git a/plugins/poll/test/javascripts/helpers/display-poll-builder-button.js.es6 b/plugins/poll/test/javascripts/helpers/display-poll-builder-button.js.es6 index ba6bdccdfb7..313f5b6a801 100644 --- a/plugins/poll/test/javascripts/helpers/display-poll-builder-button.js.es6 +++ b/plugins/poll/test/javascripts/helpers/display-poll-builder-button.js.es6 @@ -1,3 +1,5 @@ +import selectKit from "helpers/select-kit-helper"; + export function displayPollBuilderButton() { visit("/"); click("#create-topic"); diff --git a/test/javascripts/acceptance/admin-suspend-user-test.js.es6 b/test/javascripts/acceptance/admin-suspend-user-test.js.es6 index a982bc74a8b..152b035b609 100644 --- a/test/javascripts/acceptance/admin-suspend-user-test.js.es6 +++ b/test/javascripts/acceptance/admin-suspend-user-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; acceptance("Admin - Suspend User", { diff --git a/test/javascripts/acceptance/category-chooser-test.js.es6 b/test/javascripts/acceptance/category-chooser-test.js.es6 index 83b1af28db1..b6772ab7710 100644 --- a/test/javascripts/acceptance/category-chooser-test.js.es6 +++ b/test/javascripts/acceptance/category-chooser-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; acceptance("CategoryChooser", { diff --git a/test/javascripts/acceptance/category-edit-security-test.js.es6 b/test/javascripts/acceptance/category-edit-security-test.js.es6 index 6a4ca5856c6..131b26ff9dd 100644 --- a/test/javascripts/acceptance/category-edit-security-test.js.es6 +++ b/test/javascripts/acceptance/category-edit-security-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; acceptance("Category Edit - security", { diff --git a/test/javascripts/acceptance/category-edit-test.js.es6 b/test/javascripts/acceptance/category-edit-test.js.es6 index 825cd0e797b..690e028ead7 100644 --- a/test/javascripts/acceptance/category-edit-test.js.es6 +++ b/test/javascripts/acceptance/category-edit-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import DiscourseURL from "discourse/lib/url"; import { acceptance } from "helpers/qunit-helpers"; diff --git a/test/javascripts/acceptance/composer-actions-test.js.es6 b/test/javascripts/acceptance/composer-actions-test.js.es6 index b70d7491f2d..fd6eb585856 100644 --- a/test/javascripts/acceptance/composer-actions-test.js.es6 +++ b/test/javascripts/acceptance/composer-actions-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance, replaceCurrentUser } from "helpers/qunit-helpers"; import { _clearSnapshots } from "select-kit/components/composer-actions"; import { toggleCheckDraftPopup } from "discourse/controllers/composer"; diff --git a/test/javascripts/acceptance/composer-test.js.es6 b/test/javascripts/acceptance/composer-test.js.es6 index b77866a4600..b055992135c 100644 --- a/test/javascripts/acceptance/composer-test.js.es6 +++ b/test/javascripts/acceptance/composer-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; import { toggleCheckDraftPopup } from "discourse/controllers/composer"; diff --git a/test/javascripts/acceptance/composer-uncategorized-test.js.es6 b/test/javascripts/acceptance/composer-uncategorized-test.js.es6 index bbcc67a350d..c65c759c17f 100644 --- a/test/javascripts/acceptance/composer-uncategorized-test.js.es6 +++ b/test/javascripts/acceptance/composer-uncategorized-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance, replaceCurrentUser } from "helpers/qunit-helpers"; acceptance("Composer and uncategorized is not allowed", { diff --git a/test/javascripts/acceptance/dashboard-test.js.es6 b/test/javascripts/acceptance/dashboard-test.js.es6 index 1a7675dac9a..affe6c0a9f5 100644 --- a/test/javascripts/acceptance/dashboard-test.js.es6 +++ b/test/javascripts/acceptance/dashboard-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; acceptance("Dashboard", { diff --git a/test/javascripts/acceptance/group-test.js.es6 b/test/javascripts/acceptance/group-test.js.es6 index 3c73a89a840..3a0d3714a26 100644 --- a/test/javascripts/acceptance/group-test.js.es6 +++ b/test/javascripts/acceptance/group-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance, logIn } from "helpers/qunit-helpers"; acceptance("Group", { @@ -48,7 +49,7 @@ QUnit.test("Anonymous Viewing Group", async assert => { ); assert.ok(count(".user-stream-item") > 0, "it lists stream items"); - await expandSelectKit(".group-dropdown"); + await selectKit(".group-dropdown").expand(); assert.equal( find(".select-kit-row") @@ -70,7 +71,7 @@ QUnit.test("Anonymous Viewing Group", async assert => { await visit("/g"); await visit("/g/discourse"); - await expandSelectKit(".group-dropdown"); + await selectKit(".group-dropdown").expand(); assert.equal( find(".group-dropdown-filter").length, diff --git a/test/javascripts/acceptance/new-topic-test.js.es6 b/test/javascripts/acceptance/new-topic-test.js.es6 index 1ad6fc05951..b83d467a898 100644 --- a/test/javascripts/acceptance/new-topic-test.js.es6 +++ b/test/javascripts/acceptance/new-topic-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance, logIn } from "helpers/qunit-helpers"; acceptance("New Topic"); diff --git a/test/javascripts/acceptance/preferences-test.js.es6 b/test/javascripts/acceptance/preferences-test.js.es6 index e181fcaf0df..ff4319e2c6e 100644 --- a/test/javascripts/acceptance/preferences-test.js.es6 +++ b/test/javascripts/acceptance/preferences-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; import User from "discourse/models/user"; @@ -114,12 +115,12 @@ QUnit.test("font size change", async assert => { await visit("/u/eviltrout/preferences/interface"); // Live changes without reload - await expandSelectKit(".text-size .combobox"); - await selectKitSelectRowByValue("larger", ".text-size .combobox"); + await selectKit(".text-size .combobox").expand(); + await selectKit(".text-size .combobox").selectRowByValue("larger"); assert.ok(document.documentElement.classList.contains("text-size-larger")); - await expandSelectKit(".text-size .combobox"); - await selectKitSelectRowByValue("largest", ".text-size .combobox"); + await selectKit(".text-size .combobox").expand(); + await selectKit(".text-size .combobox").selectRowByValue("largest"); assert.ok(document.documentElement.classList.contains("text-size-largest")); assert.equal($.cookie("text_size"), null, "cookie is not set"); @@ -129,16 +130,16 @@ QUnit.test("font size change", async assert => { assert.equal($.cookie("text_size"), null, "cookie is not set"); - await expandSelectKit(".text-size .combobox"); - await selectKitSelectRowByValue("larger", ".text-size .combobox"); + await selectKit(".text-size .combobox").expand(); + await selectKit(".text-size .combobox").selectRowByValue("larger"); await click(".text-size input[type=checkbox]"); await savePreferences(); assert.equal($.cookie("text_size"), "larger|1", "cookie is set"); await click(".text-size input[type=checkbox]"); - await expandSelectKit(".text-size .combobox"); - await selectKitSelectRowByValue("largest", ".text-size .combobox"); + await selectKit(".text-size .combobox").expand(); + await selectKit(".text-size .combobox").selectRowByValue("largest"); await savePreferences(); assert.equal($.cookie("text_size"), null, "cookie is removed"); diff --git a/test/javascripts/acceptance/review-test.js.es6 b/test/javascripts/acceptance/review-test.js.es6 index 958f6fe2db8..e4b45f43b69 100644 --- a/test/javascripts/acceptance/review-test.js.es6 +++ b/test/javascripts/acceptance/review-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; acceptance("Review", { diff --git a/test/javascripts/acceptance/search-full-test.js.es6 b/test/javascripts/acceptance/search-full-test.js.es6 index a804c9f3b10..ebebff6d236 100644 --- a/test/javascripts/acceptance/search-full-test.js.es6 +++ b/test/javascripts/acceptance/search-full-test.js.es6 @@ -1,4 +1,6 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance, waitFor } from "helpers/qunit-helpers"; + acceptance("Search - Full Page", { settings: { tagging_enabled: true }, loggedIn: true, diff --git a/test/javascripts/acceptance/search-test.js.es6 b/test/javascripts/acceptance/search-test.js.es6 index fe2e364e2e8..49a1ae99a7e 100644 --- a/test/javascripts/acceptance/search-test.js.es6 +++ b/test/javascripts/acceptance/search-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance, logIn } from "helpers/qunit-helpers"; const emptySearchContextCallbacks = []; diff --git a/test/javascripts/acceptance/share-and-invite-mobile-test.js.es6 b/test/javascripts/acceptance/share-and-invite-mobile-test.js.es6 index 9ab9c767e46..62526e8dcb2 100644 --- a/test/javascripts/acceptance/share-and-invite-mobile-test.js.es6 +++ b/test/javascripts/acceptance/share-and-invite-mobile-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; acceptance("Share and Invite modal - mobile", { diff --git a/test/javascripts/acceptance/shared-drafts-test.js.es6 b/test/javascripts/acceptance/shared-drafts-test.js.es6 index f6433aee22e..3d15c719073 100644 --- a/test/javascripts/acceptance/shared-drafts-test.js.es6 +++ b/test/javascripts/acceptance/shared-drafts-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; acceptance("Shared Drafts", { loggedIn: true }); diff --git a/test/javascripts/acceptance/tag-groups-test.js.es6 b/test/javascripts/acceptance/tag-groups-test.js.es6 index 95556f09dd3..ebfb5c1349e 100644 --- a/test/javascripts/acceptance/tag-groups-test.js.es6 +++ b/test/javascripts/acceptance/tag-groups-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; acceptance("Tag Groups", { diff --git a/test/javascripts/acceptance/topic-edit-timer-test.js.es6 b/test/javascripts/acceptance/topic-edit-timer-test.js.es6 index af8ab7e774b..07872528ae4 100644 --- a/test/javascripts/acceptance/topic-edit-timer-test.js.es6 +++ b/test/javascripts/acceptance/topic-edit-timer-test.js.es6 @@ -1,4 +1,6 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance, replaceCurrentUser } from "helpers/qunit-helpers"; + acceptance("Topic - Edit timer", { loggedIn: true, pretend(server, helper) { diff --git a/test/javascripts/acceptance/topic-footer-buttons-mobile-test.js.es6 b/test/javascripts/acceptance/topic-footer-buttons-mobile-test.js.es6 index ca154fe7bbf..ca3483ad28f 100644 --- a/test/javascripts/acceptance/topic-footer-buttons-mobile-test.js.es6 +++ b/test/javascripts/acceptance/topic-footer-buttons-mobile-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { withPluginApi } from "discourse/lib/plugin-api"; import { clearTopicFooterButtons } from "discourse/lib/register-topic-footer-button"; import { acceptance } from "helpers/qunit-helpers"; diff --git a/test/javascripts/acceptance/topic-notifications-button-test.js.es6 b/test/javascripts/acceptance/topic-notifications-button-test.js.es6 index 90a41acd71f..3f6e028b0ed 100644 --- a/test/javascripts/acceptance/topic-notifications-button-test.js.es6 +++ b/test/javascripts/acceptance/topic-notifications-button-test.js.es6 @@ -1,4 +1,6 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; + acceptance("Topic Notifications button", { loggedIn: true, pretend(server, helper) { diff --git a/test/javascripts/acceptance/topic-test.js.es6 b/test/javascripts/acceptance/topic-test.js.es6 index 67f4cae3e42..3623d74c4e1 100644 --- a/test/javascripts/acceptance/topic-test.js.es6 +++ b/test/javascripts/acceptance/topic-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import { acceptance } from "helpers/qunit-helpers"; import { IMAGE_VERSION as v } from "pretty-text/emoji/version"; diff --git a/test/javascripts/admin/components/group-list-setting-test.js.es6 b/test/javascripts/admin/components/group-list-setting-test.js.es6 index d64bd9d7d11..e6be2313d39 100644 --- a/test/javascripts/admin/components/group-list-setting-test.js.es6 +++ b/test/javascripts/admin/components/group-list-setting-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; moduleForComponent("group-list", { integration: true }); diff --git a/test/javascripts/components/categories-admin-dropdown-test.js.es6 b/test/javascripts/components/categories-admin-dropdown-test.js.es6 index 1e62bd06d6a..198aa5dde51 100644 --- a/test/javascripts/components/categories-admin-dropdown-test.js.es6 +++ b/test/javascripts/components/categories-admin-dropdown-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; moduleForComponent("categories-admin-dropdown", { integration: true }); diff --git a/test/javascripts/components/category-chooser-test.js.es6 b/test/javascripts/components/category-chooser-test.js.es6 index c93a14e5847..70ecd7d4f0a 100644 --- a/test/javascripts/components/category-chooser-test.js.es6 +++ b/test/javascripts/components/category-chooser-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; moduleForComponent("category-chooser", { diff --git a/test/javascripts/components/category-drop-test.js.es6 b/test/javascripts/components/category-drop-test.js.es6 index f4569c4d98e..895a176cf54 100644 --- a/test/javascripts/components/category-drop-test.js.es6 +++ b/test/javascripts/components/category-drop-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import Category from "discourse/models/category"; diff --git a/test/javascripts/components/category-selector-test.js.es6 b/test/javascripts/components/category-selector-test.js.es6 index c6f82fa1fae..9376b692a33 100644 --- a/test/javascripts/components/category-selector-test.js.es6 +++ b/test/javascripts/components/category-selector-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import Category from "discourse/models/category"; diff --git a/test/javascripts/components/combo-box-test.js.es6 b/test/javascripts/components/combo-box-test.js.es6 index 274202fa241..94987dbb910 100644 --- a/test/javascripts/components/combo-box-test.js.es6 +++ b/test/javascripts/components/combo-box-test.js.es6 @@ -1,4 +1,6 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; + moduleForComponent("combo-box", { integration: true, beforeEach: function() { diff --git a/test/javascripts/components/list-setting-test.js.es6 b/test/javascripts/components/list-setting-test.js.es6 index 2926c2d4812..2242e8459b5 100644 --- a/test/javascripts/components/list-setting-test.js.es6 +++ b/test/javascripts/components/list-setting-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; moduleForComponent("list-setting", { integration: true }); diff --git a/test/javascripts/components/mini-tag-chooser-test.js.es6 b/test/javascripts/components/mini-tag-chooser-test.js.es6 index 8ff526f46f6..ae52da4c705 100644 --- a/test/javascripts/components/mini-tag-chooser-test.js.es6 +++ b/test/javascripts/components/mini-tag-chooser-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; moduleForComponent("mini-tag-chooser", { diff --git a/test/javascripts/components/multi-select-test.js.es6 b/test/javascripts/components/multi-select-test.js.es6 index fbb3022fc74..62c1c09e5e7 100644 --- a/test/javascripts/components/multi-select-test.js.es6 +++ b/test/javascripts/components/multi-select-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import { withPluginApi } from "discourse/lib/plugin-api"; import { clearCallbacks } from "select-kit/mixins/plugin-api"; diff --git a/test/javascripts/components/pinned-options-test.js.es6 b/test/javascripts/components/pinned-options-test.js.es6 index a7fe2c50fb7..25106a2203a 100644 --- a/test/javascripts/components/pinned-options-test.js.es6 +++ b/test/javascripts/components/pinned-options-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import Topic from "discourse/models/topic"; diff --git a/test/javascripts/components/single-select-test.js.es6 b/test/javascripts/components/single-select-test.js.es6 index c92cd9dc094..22fab0a4f9e 100644 --- a/test/javascripts/components/single-select-test.js.es6 +++ b/test/javascripts/components/single-select-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import { withPluginApi } from "discourse/lib/plugin-api"; import { clearCallbacks } from "select-kit/mixins/plugin-api"; diff --git a/test/javascripts/components/tag-drop-test.js.es6 b/test/javascripts/components/tag-drop-test.js.es6 index 7ef094c461e..2cfab99b487 100644 --- a/test/javascripts/components/tag-drop-test.js.es6 +++ b/test/javascripts/components/tag-drop-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import DiscourseURL from "discourse/lib/url"; diff --git a/test/javascripts/components/topic-footer-mobile-dropdown-test.js.es6 b/test/javascripts/components/topic-footer-mobile-dropdown-test.js.es6 index adcdc37a801..5cfd498fd5f 100644 --- a/test/javascripts/components/topic-footer-mobile-dropdown-test.js.es6 +++ b/test/javascripts/components/topic-footer-mobile-dropdown-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import Topic from "discourse/models/topic"; diff --git a/test/javascripts/components/topic-notifications-button-test.js.es6 b/test/javascripts/components/topic-notifications-button-test.js.es6 index b64ff4fd283..63d5df22848 100644 --- a/test/javascripts/components/topic-notifications-button-test.js.es6 +++ b/test/javascripts/components/topic-notifications-button-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import Topic from "discourse/models/topic"; diff --git a/test/javascripts/components/topic-notifications-options-test.js.es6 b/test/javascripts/components/topic-notifications-options-test.js.es6 index 6d74d71097e..25bf0af9b72 100644 --- a/test/javascripts/components/topic-notifications-options-test.js.es6 +++ b/test/javascripts/components/topic-notifications-options-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; import Topic from "discourse/models/topic"; diff --git a/test/javascripts/components/value-list-test.js.es6 b/test/javascripts/components/value-list-test.js.es6 index 7bbbd21a8e5..76185bbee8b 100644 --- a/test/javascripts/components/value-list-test.js.es6 +++ b/test/javascripts/components/value-list-test.js.es6 @@ -1,3 +1,4 @@ +import selectKit from "helpers/select-kit-helper"; import componentTest from "helpers/component-test"; moduleForComponent("value-list", { integration: true }); diff --git a/test/javascripts/helpers/select-kit-helper.js b/test/javascripts/helpers/select-kit-helper.js deleted file mode 100644 index 8d6aebb3cf6..00000000000 --- a/test/javascripts/helpers/select-kit-helper.js +++ /dev/null @@ -1,290 +0,0 @@ -function checkSelectKitIsNotExpanded(selector) { - if (find(selector).hasClass("is-expanded")) { - // eslint-disable-next-line no-console - console.warn( - "You expected select-kit to be collapsed but it is expanded." - ); - } -} - -function checkSelectKitIsNotCollapsed(selector) { - if (!find(selector).hasClass("is-expanded")) { - // eslint-disable-next-line no-console - console.warn( - "You expected select-kit to be expanded but it is collapsed." - ); - } -} - -Ember.Test.registerAsyncHelper("expandSelectKit", function(app, selector) { - checkSelectKitIsNotExpanded(selector); - click(selector + " .select-kit-header"); -}); - -Ember.Test.registerAsyncHelper("collapseSelectKit", function(app, selector) { - checkSelectKitIsNotCollapsed(selector); - click(selector + " .select-kit-header"); -}); - -Ember.Test.registerAsyncHelper("selectKitFillInFilter", function( - app, - filter, - selector -) { - checkSelectKitIsNotCollapsed(selector); - fillIn(selector + " .filter-input", filter); -}); - -Ember.Test.registerAsyncHelper("selectKitSelectRowByValue", function( - app, - value, - selector -) { - checkSelectKitIsNotCollapsed(selector); - click(selector + " .select-kit-row[data-value='" + value + "']"); -}); - -Ember.Test.registerAsyncHelper("selectKitSelectRowByName", function( - app, - name, - selector -) { - checkSelectKitIsNotCollapsed(selector); - click(selector + " .select-kit-row[data-name='" + name + "']"); -}); - -Ember.Test.registerAsyncHelper("selectKitSelectNoneRow", function( - app, - selector -) { - checkSelectKitIsNotCollapsed(selector); - click(selector + " .select-kit-row.none"); -}); - -Ember.Test.registerAsyncHelper("selectKitSelectRowByIndex", function( - app, - index, - selector -) { - checkSelectKitIsNotCollapsed(selector); - click(find(selector + " .select-kit-row").eq(index)); -}); - -Ember.Test.registerAsyncHelper("keyboardHelper", function( - app, - value, - target, - selector -) { - function createEvent(element, keyCode, options) { - element = element || ".filter-input"; - selector = find(selector).find(element); - options = options || {}; - - var type = options.type || "keydown"; - var event = jQuery.Event(type); - event.keyCode = keyCode; - if (options && options.metaKey) { - event.metaKey = true; - } - - andThen(() => { - find(selector).trigger(event); - }); - } - - switch (value) { - case "enter": - return createEvent(target, 13); - case "backspace": - return createEvent(target, 8); - case "selectAll": - return createEvent(target, 65, { metaKey: true }); - case "escape": - return createEvent(target, 27); - case "down": - return createEvent(target, 40); - case "up": - return createEvent(target, 38); - case "tab": - return createEvent(target, 9); - } -}); - -// eslint-disable-next-line no-unused-vars -function selectKit(selector) { - selector = selector || ".select-kit"; - - function rowHelper(row) { - return { - name: function() { - return row.attr("data-name"); - }, - icon: function() { - return row.find(".d-icon"); - }, - title: function() { - return row.attr("title"); - }, - value: function() { - return row.attr("data-value"); - }, - exists: function() { - return exists(row); - }, - el: function() { - return row; - } - }; - } - - function headerHelper(header) { - return { - value: function() { - return header.attr("data-value"); - }, - name: function() { - return header.attr("data-name"); - }, - label: function() { - return header.text().trim(); - }, - icon: function() { - return header.find(".icon"); - }, - title: function() { - return header.attr("title"); - }, - el: function() { - return header; - } - }; - } - - function filterHelper(filter) { - return { - icon: function() { - return filter.find(".d-icon"); - }, - exists: function() { - return exists(filter); - }, - el: function() { - return filter; - } - }; - } - - return { - expand: function() { - return expandSelectKit(selector); - }, - - collapse: function() { - return collapseSelectKit(selector); - }, - - selectRowByIndex: function(index) { - selectKitSelectRowByIndex(index, selector); - return selectKit(selector); - }, - - selectRowByValue: function(value) { - return selectKitSelectRowByValue(value, selector); - }, - - // Remove when stable is updated to Discourse 2.1 - selectRowByValueAwait: function(value) { - return selectKitSelectRowByValue(value, selector); - }, - - selectRowByName: function(name) { - selectKitSelectRowByValue(name, selector); - return selectKit(selector); - }, - - selectNoneRow: function() { - return selectKitSelectNoneRow(selector); - }, - - fillInFilter: function(filter) { - return selectKitFillInFilter(filter, selector); - }, - - keyboard: function(value, target) { - return keyboardHelper(value, target, selector); - }, - - isExpanded: function() { - return find(selector).hasClass("is-expanded"); - }, - - isFocused: function() { - return find(selector).hasClass("is-focused"); - }, - - isHidden: function() { - return find(selector).hasClass("is-hidden"); - }, - - header: function() { - return headerHelper(find(selector).find(".select-kit-header")); - }, - - filter: function() { - return filterHelper(find(selector).find(".select-kit-filter")); - }, - - rows: function() { - return find(selector).find(".select-kit-row"); - }, - - rowByValue: function(value) { - return rowHelper( - find(selector).find('.select-kit-row[data-value="' + value + '"]') - ); - }, - - rowByName: function(name) { - return rowHelper( - find(selector).find('.select-kit-row[data-name="' + name + '"]') - ); - }, - - rowByIndex: function(index) { - return rowHelper( - find(selector).find(".select-kit-row:eq(" + index + ")") - ); - }, - - el: function() { - return find(selector); - }, - - noneRow: function() { - return rowHelper(find(selector).find(".select-kit-row.none")); - }, - - validationMessage: function() { - var validationMessage = find(selector).find(".validation-message"); - - if (validationMessage.length) { - return validationMessage.html().trim(); - } else { - return null; - } - }, - - selectedRow: function() { - return rowHelper(find(selector).find(".select-kit-row.is-selected")); - }, - - highlightedRow: function() { - return rowHelper(find(selector).find(".select-kit-row.is-highlighted")); - }, - - exists: function() { - return exists(selector); - } - }; -} diff --git a/test/javascripts/helpers/select-kit-helper.js.es6 b/test/javascripts/helpers/select-kit-helper.js.es6 new file mode 100644 index 00000000000..47243a55185 --- /dev/null +++ b/test/javascripts/helpers/select-kit-helper.js.es6 @@ -0,0 +1,245 @@ +function checkSelectKitIsNotExpanded(selector) { + if (find(selector).hasClass("is-expanded")) { + // eslint-disable-next-line no-console + console.warn("You expected select-kit to be collapsed but it is expanded."); + } +} + +function checkSelectKitIsNotCollapsed(selector) { + if (!find(selector).hasClass("is-expanded")) { + // eslint-disable-next-line no-console + console.warn("You expected select-kit to be expanded but it is collapsed."); + } +} + +async function expandSelectKit(selector) { + checkSelectKitIsNotExpanded(selector); + return await click(`${selector} .select-kit-header`); +} + +async function collapseSelectKit(selector) { + checkSelectKitIsNotCollapsed(selector); + return await click(`${selector} .select-kit-header`); +} + +async function selectKitFillInFilter(filter, selector) { + checkSelectKitIsNotCollapsed(selector); + await fillIn(`${selector} .filter-input`, filter); +} + +async function selectKitSelectRowByValue(value, selector) { + checkSelectKitIsNotCollapsed(selector); + await click(`${selector} .select-kit-row[data-value='${value}']`); +} + +async function selectKitSelectRowByName(name, selector) { + checkSelectKitIsNotCollapsed(selector); + await click(`${selector} .select-kit-row[data-name='${name}']`); +} + +async function selectKitSelectNoneRow(selector) { + checkSelectKitIsNotCollapsed(selector); + await click(`${selector} .select-kit-row.none`); +} + +async function selectKitSelectRowByIndex(index, selector) { + checkSelectKitIsNotCollapsed(selector); + await click(find(`${selector} .select-kit-row`).eq(index)); +} + +async function keyboardHelper(value, target, selector) { + target = find(selector).find(target || ".filter-input"); + + if (value === "selectAll") { + // special casing the only one not working with triggerEvent + const event = jQuery.Event("keydown"); + event.keyCode = 65; + event.metaKey = true; + target.trigger(event); + } else { + const mapping = { + enter: { keyCode: 13 }, + backspace: { keyCode: 8 }, + escape: { keyCode: 27 }, + down: { keyCode: 40 }, + up: { keyCode: 38 }, + tab: { keyCode: 9 } + }; + + await triggerEvent(target, "keydown", mapping[value]); + } +} + +function rowHelper(row) { + return { + name() { + return row.attr("data-name"); + }, + icon() { + return row.find(".d-icon"); + }, + title() { + return row.attr("title"); + }, + value() { + return row.attr("data-value"); + }, + exists() { + return exists(row); + }, + el() { + return row; + } + }; +} + +function headerHelper(header) { + return { + value() { + return header.attr("data-value"); + }, + name() { + return header.attr("data-name"); + }, + label() { + return header.text().trim(); + }, + icon() { + return header.find(".icon"); + }, + title() { + return header.attr("title"); + }, + el() { + return header; + } + }; +} + +function filterHelper(filter) { + return { + icon() { + return filter.find(".d-icon"); + }, + exists() { + return exists(filter); + }, + el() { + return filter; + } + }; +} + +export default function selectKit(selector) { + selector = selector || ".select-kit"; + + return { + async expand() { + await expandSelectKit(selector); + }, + + async collapse() { + await collapseSelectKit(selector); + }, + + async selectRowByIndex(index) { + await selectKitSelectRowByIndex(index, selector); + }, + + async selectRowByValue(value) { + await selectKitSelectRowByValue(value, selector); + }, + + async selectKitSelectRowByName(name) { + await selectKitSelectRowByName(name, selector); + }, + + async selectRowByName(name) { + await selectKitSelectRowByValue(name, selector); + }, + + async selectNoneRow() { + await selectKitSelectNoneRow(selector); + }, + + async fillInFilter(filter) { + await selectKitFillInFilter(filter, selector); + }, + + async keyboard(value, target) { + await keyboardHelper(value, target, selector); + }, + + isExpanded() { + return find(selector).hasClass("is-expanded"); + }, + + isFocused() { + return find(selector).hasClass("is-focused"); + }, + + isHidden() { + return find(selector).hasClass("is-hidden"); + }, + + header() { + return headerHelper(find(selector).find(".select-kit-header")); + }, + + filter() { + return filterHelper(find(selector).find(".select-kit-filter")); + }, + + rows() { + return find(selector).find(".select-kit-row"); + }, + + rowByValue(value) { + return rowHelper( + find(selector).find('.select-kit-row[data-value="' + value + '"]') + ); + }, + + rowByName(name) { + return rowHelper( + find(selector).find('.select-kit-row[data-name="' + name + '"]') + ); + }, + + rowByIndex(index) { + return rowHelper( + find(selector).find(".select-kit-row:eq(" + index + ")") + ); + }, + + el() { + return find(selector); + }, + + noneRow() { + return rowHelper(find(selector).find(".select-kit-row.none")); + }, + + validationMessage() { + const validationMessage = find(selector).find(".validation-message"); + + if (validationMessage.length) { + return validationMessage.html().trim(); + } else { + return null; + } + }, + + selectedRow() { + return rowHelper(find(selector).find(".select-kit-row.is-selected")); + }, + + highlightedRow() { + return rowHelper(find(selector).find(".select-kit-row.is-highlighted")); + }, + + exists() { + return exists(selector); + } + }; +} diff --git a/test/javascripts/test_helper.js b/test/javascripts/test_helper.js index 1d8a8aa42eb..8ecda039a78 100644 --- a/test/javascripts/test_helper.js +++ b/test/javascripts/test_helper.js @@ -30,7 +30,6 @@ //= require sinon/pkg/sinon //= require helpers/assertions -//= require helpers/select-kit-helper //= require helpers/qunit-helpers //= require_tree ./fixtures