diff --git a/app/assets/javascripts/discourse-plugins/index.js b/app/assets/javascripts/discourse-plugins/index.js index df33693b31..4b5ed201fb 100644 --- a/app/assets/javascripts/discourse-plugins/index.js +++ b/app/assets/javascripts/discourse-plugins/index.js @@ -113,18 +113,22 @@ module.exports = { directoryName, "test/javascripts" ); + const configDirectory = path.resolve(root, directoryName, "config"); const hasJs = fs.existsSync(jsDirectory); const hasAdminJs = fs.existsSync(adminJsDirectory); const hasTests = fs.existsSync(testDirectory); + const hasConfig = fs.existsSync(configDirectory); return { pluginName, directoryName, jsDirectory, adminJsDirectory, testDirectory, + configDirectory, hasJs, hasAdminJs, hasTests, + hasConfig, }; }); }, diff --git a/app/assets/javascripts/discourse/app/initializers/register-media-optimization-upload-processor.js b/app/assets/javascripts/discourse/app/initializers/register-media-optimization-upload-processor.js index 06027c8cf8..f80b68bde1 100644 --- a/app/assets/javascripts/discourse/app/initializers/register-media-optimization-upload-processor.js +++ b/app/assets/javascripts/discourse/app/initializers/register-media-optimization-upload-processor.js @@ -1,5 +1,6 @@ import { addComposerUploadPreProcessor } from "discourse/components/composer-editor"; import UppyMediaOptimization from "discourse/lib/uppy-media-optimization-plugin"; +import { Promise } from "rsvp"; export default { name: "register-media-optimization-upload-processor", @@ -11,10 +12,15 @@ export default { UppyMediaOptimization, ({ isMobileDevice }) => { return { - optimizeFn: (data, opts) => - container + optimizeFn: (data, opts) => { + if (container.isDestroyed || container.isDestroying) { + return Promise.resolve(); + } + + return container .lookup("service:media-optimization-worker") - .optimizeImage(data, opts), + .optimizeImage(data, opts); + }, runParallel: !isMobileDevice, }; } diff --git a/app/assets/javascripts/discourse/app/widgets/search-menu.js b/app/assets/javascripts/discourse/app/widgets/search-menu.js index c2c546af63..56012ab317 100644 --- a/app/assets/javascripts/discourse/app/widgets/search-menu.js +++ b/app/assets/javascripts/discourse/app/widgets/search-menu.js @@ -367,7 +367,7 @@ export default createWidget("search-menu", { return; } - if (e.which === 65 /* a */) { + if (e.key === "A") { if (document.activeElement?.classList.contains("search-link")) { if (document.querySelector("#reply-control.open")) { // add a link and focus composer @@ -388,8 +388,8 @@ export default createWidget("search-menu", { } } - const up = e.which === 38; - const down = e.which === 40; + const up = e.key === "ArrowUp"; + const down = e.key === "ArrowDown"; if (up || down) { let focused = document.activeElement.closest(".search-menu") ? document.activeElement @@ -443,7 +443,7 @@ export default createWidget("search-menu", { } const searchInput = document.querySelector("#search-term"); - if (e.which === 13 && e.target === searchInput) { + if (e.key === "Enter" && e.target === searchInput) { const recentEnterHit = this.state._lastEnterTimestamp && Date.now() - this.state._lastEnterTimestamp < SECOND_ENTER_MAX_DELAY; @@ -463,7 +463,7 @@ export default createWidget("search-menu", { this.state._lastEnterTimestamp = Date.now(); } - if (e.target === searchInput && e.which === 8 /* backspace */) { + if (e.target === searchInput && e.key === "Backspace") { if (!searchInput.value) { this.clearTopicContext(); this.clearPMInboxContext(); diff --git a/app/assets/javascripts/discourse/ember-cli-build.js b/app/assets/javascripts/discourse/ember-cli-build.js index 51e709b4c0..dea7c1acce 100644 --- a/app/assets/javascripts/discourse/ember-cli-build.js +++ b/app/assets/javascripts/discourse/ember-cli-build.js @@ -6,6 +6,7 @@ const mergeTrees = require("broccoli-merge-trees"); const concat = require("broccoli-concat"); const prettyTextEngine = require("./lib/pretty-text-engine"); const { createI18nTree } = require("./lib/translation-plugin"); +const { parsePluginClientSettings } = require("./lib/site-settings-plugin"); const discourseScss = require("./lib/discourse-scss"); const generateScriptsTree = require("./lib/scripts"); const funnel = require("broccoli-funnel"); @@ -168,6 +169,7 @@ module.exports = function (defaults) { return mergeTrees([ createI18nTree(discourseRoot, vendorJs), + parsePluginClientSettings(discourseRoot, vendorJs, app), app.toTree(), funnel(`${discourseRoot}/public/javascripts`, { destDir: "javascripts" }), funnel(`${vendorJs}/highlightjs`, { diff --git a/app/assets/javascripts/discourse/lib/site-settings-plugin.js b/app/assets/javascripts/discourse/lib/site-settings-plugin.js new file mode 100644 index 0000000000..c576eee53d --- /dev/null +++ b/app/assets/javascripts/discourse/lib/site-settings-plugin.js @@ -0,0 +1,96 @@ +const Plugin = require("broccoli-plugin"); +const Yaml = require("js-yaml"); +const fs = require("fs"); +const concat = require("broccoli-concat"); +const mergeTrees = require("broccoli-merge-trees"); +const deepmerge = require("deepmerge"); +const glob = require("glob"); +const { shouldLoadPluginTestJs } = require("discourse/lib/plugin-js"); + +let built = false; + +class SiteSettingsPlugin extends Plugin { + constructor(inputNodes, inputFile, options) { + super(inputNodes, { + ...options, + persistentOutput: true, + }); + } + + build() { + if (built) { + return; + } + + let parsed = {}; + + this.inputPaths.forEach((path) => { + let inputFile; + if (path.includes("plugins")) { + inputFile = "settings.yml"; + } else { + inputFile = "site_settings.yml"; + } + const file = path + "/" + inputFile; + let yaml; + try { + yaml = fs.readFileSync(file, { encoding: "UTF-8" }); + } catch (err) { + // the plugin does not have a config file, go to the next file + return; + } + const loaded = Yaml.load(yaml, { json: true }); + parsed = deepmerge(parsed, loaded); + }); + + let clientSettings = {}; + // eslint-disable-next-line no-unused-vars + for (const [category, settings] of Object.entries(parsed)) { + for (const [setting, details] of Object.entries(settings)) { + if (details.client) { + clientSettings[setting] = details.default; + } + } + } + const contents = `var CLIENT_SITE_SETTINGS_WITH_DEFAULTS = ${JSON.stringify( + clientSettings + )}`; + + fs.writeFileSync(`${this.outputPath}/` + "settings_out.js", contents); + built = true; + } +} + +module.exports = function siteSettingsPlugin(...params) { + return new SiteSettingsPlugin(...params); +}; + +module.exports.parsePluginClientSettings = function ( + discourseRoot, + vendorJs, + app +) { + let settings = [discourseRoot + "/config"]; + + if (shouldLoadPluginTestJs()) { + const pluginInfos = app.project + .findAddonByName("discourse-plugins") + .pluginInfos(); + pluginInfos.forEach(({ hasConfig, configDirectory }) => { + if (hasConfig) { + settings = settings.concat(glob.sync(configDirectory)); + } + }); + } + + const loadedSettings = new SiteSettingsPlugin(settings, "site_settings.yml"); + + return concat(mergeTrees([loadedSettings]), { + inputFiles: [], + headerFiles: [], + footerFiles: [], + outputFile: `assets/test-site-settings.js`, + }); +}; + +module.exports.SiteSettingsPlugin = SiteSettingsPlugin; diff --git a/app/assets/javascripts/discourse/tests/acceptance/bootstrap-mode-notice-test.js b/app/assets/javascripts/discourse/tests/acceptance/bootstrap-mode-notice-test.js index 9d8812ccf3..de3c793294 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/bootstrap-mode-notice-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/bootstrap-mode-notice-test.js @@ -1,10 +1,9 @@ import { acceptance, exists } from "discourse/tests/helpers/qunit-helpers"; import { test } from "qunit"; import { click, currentURL, settled, visit } from "@ember/test-helpers"; -import { set } from "@ember/object"; acceptance("Bootstrap Mode Notice", function (needs) { - needs.user(); + needs.user({ admin: true }); needs.site({ wizard_required: true }); needs.settings({ bootstrap_mode_enabled: true, @@ -36,8 +35,8 @@ acceptance("Bootstrap Mode Notice", function (needs) { "it transitions to the wizard page" ); + this.siteSettings.bootstrap_mode_enabled = false; await visit("/"); - set(this.siteSettings, "bootstrap_mode_enabled", false); await settled(); assert.ok( !exists(".bootstrap-mode-notice"), diff --git a/app/assets/javascripts/discourse/tests/acceptance/composer-actions-test.js b/app/assets/javascripts/discourse/tests/acceptance/composer-actions-test.js index 2f1359d4d3..72a984ef66 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/composer-actions-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/composer-actions-test.js @@ -24,7 +24,7 @@ acceptance("Composer Actions", function (needs) { }); needs.settings({ prioritize_username_in_ux: true, - display_name_on_post: false, + display_name_on_posts: false, enable_whispers: true, }); needs.site({ can_tag_topics: true }); @@ -489,7 +489,7 @@ acceptance("Prioritize Username", function (needs) { needs.user(); needs.settings({ prioritize_username_in_ux: true, - display_name_on_post: false, + display_name_on_posts: false, }); test("Reply to post use username", async function (assert) { @@ -517,7 +517,7 @@ acceptance("Prioritize Full Name", function (needs) { needs.user(); needs.settings({ prioritize_username_in_ux: false, - display_name_on_post: true, + display_name_on_posts: true, }); test("Reply to post use full name", async function (assert) { @@ -555,7 +555,7 @@ acceptance("Prioritizing Name fall back", function (needs) { needs.user(); needs.settings({ prioritize_username_in_ux: false, - display_name_on_post: true, + display_name_on_posts: true, }); test("Quotes fall back to username if name is not present", async function (assert) { diff --git a/app/assets/javascripts/discourse/tests/acceptance/composer-editor-mentions-test.js b/app/assets/javascripts/discourse/tests/acceptance/composer-editor-mentions-test.js index 6329a25769..29528b624a 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/composer-editor-mentions-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/composer-editor-mentions-test.js @@ -18,7 +18,7 @@ acceptance("Composer - editor mentions", function (needs) { }; needs.user(); - needs.settings({ enable_mentions: true }); + needs.settings({ enable_mentions: true, allow_uncategorized_topics: true }); needs.hooks.afterEach(() => { if (clock) { diff --git a/app/assets/javascripts/discourse/tests/acceptance/composer-image-preview-test.js b/app/assets/javascripts/discourse/tests/acceptance/composer-image-preview-test.js index 4c730d62f5..75103a3c9b 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/composer-image-preview-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/composer-image-preview-test.js @@ -11,7 +11,7 @@ import { test } from "qunit"; acceptance("Composer - Image Preview", function (needs) { needs.user(); - needs.settings({ enable_whispers: true }); + needs.settings({ enable_whispers: true, allow_uncategorized_topics: true }); needs.site({ can_tag_topics: true }); needs.pretender((server, helper) => { server.post("/uploads/lookup-urls", () => { diff --git a/app/assets/javascripts/discourse/tests/acceptance/composer-tags-test.js b/app/assets/javascripts/discourse/tests/acceptance/composer-tags-test.js index fcea997085..07a290a7d5 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/composer-tags-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/composer-tags-test.js @@ -18,6 +18,7 @@ acceptance("Composer - Tags", function (needs) { }); }); needs.site({ can_tag_topics: true }); + needs.settings({ allow_uncategorized_topics: true }); test("staff bypass tag validation rule", async function (assert) { await visit("/"); diff --git a/app/assets/javascripts/discourse/tests/acceptance/composer-test.js b/app/assets/javascripts/discourse/tests/acceptance/composer-test.js index fe74e72aa7..a86afe5d08 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/composer-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/composer-test.js @@ -302,7 +302,7 @@ acceptance("Composer", function (needs) { await visit("/"); await click("#create-topic"); await fillIn("#reply-title", "This title doesn't matter"); - await fillIn(".d-editor-input", "custom message"); + await fillIn(".d-editor-input", "custom message that is a good length"); await click("#reply-control button.create"); assert.strictEqual( @@ -1107,6 +1107,7 @@ acceptance("Composer - Customizations", function (needs) { acceptance("Composer - Focus Open and Closed", function (needs) { needs.user(); + needs.settings({ allow_uncategorized_topics: true }); test("Focusing a composer which is not open with create topic", async function (assert) { await visit("/t/internationalization-localization/280"); diff --git a/app/assets/javascripts/discourse/tests/acceptance/composer-uploads-uppy-test.js b/app/assets/javascripts/discourse/tests/acceptance/composer-uploads-uppy-test.js index 2f62ab4cad..8e4a3b5c82 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/composer-uploads-uppy-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/composer-uploads-uppy-test.js @@ -81,6 +81,7 @@ acceptance("Uppy Composer Attachment - Upload Placeholder", function (needs) { needs.settings({ simultaneous_uploads: 2, enable_rich_text_paste: true, + allow_uncategorized_topics: true, }); needs.hooks.afterEach(() => { uploadNumber = 1; @@ -487,6 +488,7 @@ acceptance("Uppy Composer Attachment - Upload Error", function (needs) { }); needs.settings({ simultaneous_uploads: 2, + allow_uncategorized_topics: true, }); test("should show an error message for the failed upload", async function (assert) { @@ -527,6 +529,7 @@ acceptance("Uppy Composer Attachment - Upload Handler", function (needs) { needs.pretender(pretender); needs.settings({ simultaneous_uploads: 2, + allow_uncategorized_topics: true, }); needs.hooks.beforeEach(() => { withPluginApi("0.8.14", (api) => { diff --git a/app/assets/javascripts/discourse/tests/acceptance/emoji-test.js b/app/assets/javascripts/discourse/tests/acceptance/emoji-test.js index 9aabd553ea..1b4aeb8e75 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/emoji-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/emoji-test.js @@ -21,7 +21,7 @@ acceptance("Emoji", function (needs) { assert.strictEqual( normalizeHtml(query(".d-editor-preview").innerHTML.trim()), normalizeHtml( - `
this is an emoji ![]()
this is an emoji ![]()
this is an emoji ![]()
this is an emoji ![]()
`,
+ `emoticons
`,
"emoticons are still supported"
);
testUnescape(
"With emoji :O: :frog: :smile:",
- `With emoji
`,
+ `With emoji
`,
"title with emoji"
);
testUnescape(
@@ -47,27 +47,27 @@ discourseModule("Unit | Utility | emoji", function () {
);
testUnescape(
"(:frog:) :)",
- `(
)
`,
+ `(
)
`,
"non-word characters allowed next to emoji"
);
testUnescape(
":smile: hi",
- `
hi`,
+ `
hi`,
"start of line"
);
testUnescape(
"hi :smile:",
- `hi
`,
+ `hi
`,
"end of line"
);
testUnescape(
"hi :blonde_woman:t4:",
- `hi
`,
+ `hi
`,
"support for skin tones"
);
testUnescape(
"hi :blonde_woman:t4: :blonde_man:t6:",
- `hi
`,
+ `hi
`,
"support for multiple skin tones"
);
testUnescape(
@@ -95,7 +95,7 @@ discourseModule("Unit | Utility | emoji", function () {
);
testUnescape(
"Hello 😊 World",
- `Hello
World`,
+ `Hello
World`,
"emoji from Unicode emoji"
);
testUnescape(
@@ -108,7 +108,7 @@ discourseModule("Unit | Utility | emoji", function () {
);
testUnescape(
"Hello😊World",
- `Hello
World`,
+ `Hello
World`,
"emoji from Unicode emoji when inline translation enabled",
{
enable_inline_emoji_translation: true,
@@ -124,13 +124,13 @@ discourseModule("Unit | Utility | emoji", function () {
);
testUnescape(
"hi:smile:",
- `hi
`,
+ `hi
`,
"emoji when inline translation enabled",
{ enable_inline_emoji_translation: true }
);
assert.strictEqual(
emojiUnescape(":smile:", { tabIndex: "0" }),
- `
`,
+ `
`,
"emoji when tabindex is enabled"
);
});
diff --git a/app/assets/javascripts/discourse/tests/unit/lib/formatter-test.js b/app/assets/javascripts/discourse/tests/unit/lib/formatter-test.js
index 311fc2d763..415f5dade8 100644
--- a/app/assets/javascripts/discourse/tests/unit/lib/formatter-test.js
+++ b/app/assets/javascripts/discourse/tests/unit/lib/formatter-test.js
@@ -150,6 +150,7 @@ discourseModule("Unit | Utility | formatter", function (hooks) {
test("formatting tiny dates", function (assert) {
let shortDateYear = shortDateTester("MMM 'YY");
+ this.siteSettings.relative_date_duration = 14;
assert.strictEqual(formatMins(0), "1m");
assert.strictEqual(formatMins(1), "1m");
diff --git a/app/assets/javascripts/discourse/tests/unit/lib/pretty-text-test.js b/app/assets/javascripts/discourse/tests/unit/lib/pretty-text-test.js
index b0c2ead7d9..e165ee32b3 100644
--- a/app/assets/javascripts/discourse/tests/unit/lib/pretty-text-test.js
+++ b/app/assets/javascripts/discourse/tests/unit/lib/pretty-text-test.js
@@ -16,7 +16,7 @@ const rawOpts = {
enable_emoji: true,
enable_emoji_shortcuts: true,
enable_mentions: true,
- emoji_set: "google_classic",
+ emoji_set: "twitter",
external_emoji_url: "",
highlighted_languages: "json|ruby|javascript",
default_code_lang: "auto",
@@ -1524,7 +1524,7 @@ var bar = 'bar';
assert.cookedOptions(
":grin: @sam",
{ featuresOverride: ["emoji"] },
- `
@sam
@sam
![]()
![]()
![]()
![]()
![]()
![]()
test
test
test
test
with all
the emojis 
`,
+ `
with all
the emojis 
`,
"supports emojis"
);
});
@@ -238,7 +238,7 @@ discourseModule("Unit | Model | topic", function (hooks) {
assert.strictEqual(
topic.get("escapedExcerpt"),
- `This is a test topic
`,
+ `This is a test topic
`,
"supports emojis"
);
});
diff --git a/app/assets/javascripts/pretty-text/addon/engines/discourse-markdown-it.js b/app/assets/javascripts/pretty-text/addon/engines/discourse-markdown-it.js
index 8ce6442575..e0813c2310 100644
--- a/app/assets/javascripts/pretty-text/addon/engines/discourse-markdown-it.js
+++ b/app/assets/javascripts/pretty-text/addon/engines/discourse-markdown-it.js
@@ -385,6 +385,12 @@ function setupMarkdownEngine(opts, featureConfig) {
opts.pluginCallbacks.forEach(([feature, callback]) => {
if (featureConfig[feature]) {
+ if (callback === null || callback === undefined) {
+ // eslint-disable-next-line no-console
+ console.log("BAD MARKDOWN CALLBACK FOUND");
+ // eslint-disable-next-line no-console
+ console.log(`FEATURE IS: ${feature}`);
+ }
opts.engine.use(callback);
}
});
diff --git a/plugins/chat/test/javascripts/acceptance/chat-composer-test.js b/plugins/chat/test/javascripts/acceptance/chat-composer-test.js
index 7963f3a2b4..cb60304830 100644
--- a/plugins/chat/test/javascripts/acceptance/chat-composer-test.js
+++ b/plugins/chat/test/javascripts/acceptance/chat-composer-test.js
@@ -67,7 +67,10 @@ acceptance("Discourse Chat - Composer", function (needs) {
"service:chat-emoji-reaction-store"
);
- assert.deepEqual(emojiReactionStore.favorites, []);
+ assert.deepEqual(
+ emojiReactionStore.favorites,
+ this.siteSettings.default_emoji_reactions.split("|")
+ );
await visit("/chat/channel/11/-");
await click(".chat-composer-dropdown__trigger-btn");
@@ -76,7 +79,7 @@ acceptance("Discourse Chat - Composer", function (needs) {
assert.deepEqual(
emojiReactionStore.favorites,
- ["grinning"],
+ ["grinning"].concat(this.siteSettings.default_emoji_reactions.split("|")),
"it tracks the emoji"
);
});
@@ -86,7 +89,10 @@ acceptance("Discourse Chat - Composer", function (needs) {
"service:chat-emoji-reaction-store"
);
- assert.deepEqual(emojiReactionStore.favorites, []);
+ assert.deepEqual(
+ emojiReactionStore.favorites,
+ this.siteSettings.default_emoji_reactions.split("|")
+ );
await visit("/chat/channel/11/-");
await fillIn(".chat-composer-input", "test :grinni");
@@ -95,7 +101,7 @@ acceptance("Discourse Chat - Composer", function (needs) {
assert.deepEqual(
emojiReactionStore.favorites,
- ["grinning"],
+ ["grinning"].concat(this.siteSettings.default_emoji_reactions.split("|")),
"it tracks the emoji"
);
});
diff --git a/plugins/chat/test/javascripts/acceptance/chat-message-test.js b/plugins/chat/test/javascripts/acceptance/chat-message-test.js
index 8bb00f7ebf..5ddc50ecdd 100644
--- a/plugins/chat/test/javascripts/acceptance/chat-message-test.js
+++ b/plugins/chat/test/javascripts/acceptance/chat-message-test.js
@@ -30,7 +30,10 @@ acceptance("Discourse Chat - Chat Message", function (needs) {
"service:chat-emoji-reaction-store"
);
- assert.deepEqual(emojiReactionStore.favorites, []);
+ assert.deepEqual(
+ emojiReactionStore.favorites,
+ this.siteSettings.default_emoji_reactions.split("|")
+ );
await visit("/chat/channel/4/public-category");
await click(
@@ -39,7 +42,11 @@ acceptance("Discourse Chat - Chat Message", function (needs) {
assert.deepEqual(
emojiReactionStore.favorites,
- ["heart"],
+ ["heart"].concat(
+ this.siteSettings.default_emoji_reactions
+ .split("|")
+ .filter((r) => r !== "heart")
+ ),
"it tracks the emoji"
);
@@ -49,7 +56,11 @@ acceptance("Discourse Chat - Chat Message", function (needs) {
assert.deepEqual(
emojiReactionStore.favorites,
- ["heart"],
+ ["heart"].concat(
+ this.siteSettings.default_emoji_reactions
+ .split("|")
+ .filter((r) => r !== "heart")
+ ),
"it doesn’t untrack when removing the reaction"
);
});
@@ -59,7 +70,10 @@ acceptance("Discourse Chat - Chat Message", function (needs) {
"service:chat-emoji-reaction-store"
);
- assert.deepEqual(emojiReactionStore.favorites, []);
+ assert.deepEqual(
+ emojiReactionStore.favorites,
+ this.siteSettings.default_emoji_reactions.split("|")
+ );
await visit("/chat/channel/4/public-category");
await triggerEvent(".chat-message-container[data-id='176']", "mouseenter");
@@ -68,7 +82,7 @@ acceptance("Discourse Chat - Chat Message", function (needs) {
assert.deepEqual(
emojiReactionStore.favorites,
- ["grinning"],
+ ["grinning"].concat(this.siteSettings.default_emoji_reactions.split("|")),
"it tracks the emoji"
);
@@ -78,7 +92,7 @@ acceptance("Discourse Chat - Chat Message", function (needs) {
assert.deepEqual(
emojiReactionStore.favorites,
- ["grinning"],
+ ["grinning"].concat(this.siteSettings.default_emoji_reactions.split("|")),
"it doesn’t untrack when removing the reaction"
);
});
diff --git a/plugins/chat/test/javascripts/unit/lib/chat-emoji-reaction-store-test.js b/plugins/chat/test/javascripts/unit/lib/chat-emoji-reaction-store-test.js
index 5d29b55a78..b53a2084dc 100644
--- a/plugins/chat/test/javascripts/unit/lib/chat-emoji-reaction-store-test.js
+++ b/plugins/chat/test/javascripts/unit/lib/chat-emoji-reaction-store-test.js
@@ -85,7 +85,10 @@ module("Discourse Chat | Unit | chat-emoji-reaction-store", function (hooks) {
this.chatEmojiReactionStore.storedFavorites = [];
this.chatEmojiReactionStore.track("yum");
- assert.deepEqual(this.chatEmojiReactionStore.storedFavorites, ["yum"]);
+ assert.deepEqual(
+ this.chatEmojiReactionStore.storedFavorites,
+ ["yum"].concat(this.siteSettings.default_emoji_reactions.split("|"))
+ );
});
test("#storedFavorites when tracking different emojis", function (assert) {
@@ -97,7 +100,9 @@ module("Discourse Chat | Unit | chat-emoji-reaction-store", function (hooks) {
assert.deepEqual(
this.chatEmojiReactionStore.storedFavorites,
- ["grinning", "yum", "not_yum", "yum"],
+ ["grinning", "yum", "not_yum", "yum"].concat(
+ this.siteSettings.default_emoji_reactions.split("|")
+ ),
"it ensures last in is first"
);
});
diff --git a/plugins/discourse-details/test/javascripts/acceptance/details-button-test.js b/plugins/discourse-details/test/javascripts/acceptance/details-button-test.js
index a0897f6c42..8a63df5517 100644
--- a/plugins/discourse-details/test/javascripts/acceptance/details-button-test.js
+++ b/plugins/discourse-details/test/javascripts/acceptance/details-button-test.js
@@ -14,6 +14,9 @@ acceptance("Details Button", function (needs) {
await visit("/");
await click("#create-topic");
+ const categoryChooser = selectKit(".category-chooser");
+ await categoryChooser.expand();
+ await categoryChooser.selectRowByValue(2);
await popupMenu.expand();
await popupMenu.selectRowByValue("insertDetails");
@@ -115,6 +118,9 @@ acceptance("Details Button", function (needs) {
await visit("/");
await click("#create-topic");
+ const categoryChooser = selectKit(".category-chooser");
+ await categoryChooser.expand();
+ await categoryChooser.selectRowByValue(2);
await fillIn(".d-editor-input", multilineInput);
const textarea = query(".d-editor-input");
diff --git a/plugins/discourse-details/test/javascripts/lib/details-cooked-test.js b/plugins/discourse-details/test/javascripts/lib/details-cooked-test.js
index a436ce76df..b7019a8ba5 100644
--- a/plugins/discourse-details/test/javascripts/lib/details-cooked-test.js
+++ b/plugins/discourse-details/test/javascripts/lib/details-cooked-test.js
@@ -4,7 +4,7 @@ import { module, test } from "qunit";
const defaultOpts = buildOptions({
siteSettings: {
enable_emoji: true,
- emoji_set: "google_classic",
+ emoji_set: "twitter",
highlighted_languages: "json|ruby|javascript",
default_code_lang: "auto",
},
diff --git a/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-composer-test.js b/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-composer-test.js
index 3c4855cb61..b0411398b8 100644
--- a/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-composer-test.js
+++ b/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-composer-test.js
@@ -23,6 +23,9 @@ acceptance("Local Dates - composer", function (needs) {
await visit("/");
await click("#create-topic");
+ const categoryChooser = selectKit(".category-chooser");
+ await categoryChooser.expand();
+ await categoryChooser.selectRowByValue(2);
await fillIn(
".d-editor-input",
@@ -73,6 +76,9 @@ acceptance("Local Dates - composer", function (needs) {
test("date modal", async function (assert) {
await visit("/");
await click("#create-topic");
+ const categoryChooser = selectKit(".category-chooser");
+ await categoryChooser.expand();
+ await categoryChooser.selectRowByValue(2);
await click(".d-editor-button-bar .local-dates");
const timezoneChooser = selectKit(".timezone-input");
@@ -88,6 +94,9 @@ acceptance("Local Dates - composer", function (needs) {
test("date modal - controls", async function (assert) {
await visit("/");
await click("#create-topic");
+ const categoryChooser = selectKit(".category-chooser");
+ await categoryChooser.expand();
+ await categoryChooser.selectRowByValue(2);
await click(".d-editor-button-bar .local-dates");
await click('.pika-table td[data-day="5"] > .pika-button');
diff --git a/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-quoting-test.js b/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-quoting-test.js
index 265cf34940..5c17034018 100644
--- a/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-quoting-test.js
+++ b/plugins/discourse-local-dates/test/javascripts/acceptance/local-dates-quoting-test.js
@@ -49,7 +49,7 @@ acceptance("Local Dates - quoting", function (needs) {
await click(".insert-quote");
assert.strictEqual(
query(".d-editor-input").value.trim(),
- `[quote=\"Uwe Keim, post:1, topic:280, username:uwe_keim\"]
+ `[quote=\"uwe_keim, post:1, topic:280\"]
This is a test [date=2022-06-17 time=10:00:00 timezone="Australia/Brisbane" displayedTimezone="Australia/Perth"]
[/quote]`,
"converts the date to markdown with all options correctly"
@@ -88,7 +88,7 @@ acceptance("Local Dates - quoting range", function (needs) {
await click(".insert-quote");
assert.strictEqual(
query(".d-editor-input").value.trim(),
- `[quote=\"Uwe Keim, post:1, topic:280, username:uwe_keim\"]
+ `[quote=\"uwe_keim, post:1, topic:280\"]
Some text [date-range from=2022-06-17T09:30:00 to=2022-06-18T10:30:00 format="LL" timezone="Australia/Brisbane" timezones="Africa/Accra|Australia/Brisbane|Europe/Paris"]
[/quote]`,
"converts the date range to markdown with all options correctly"
@@ -130,7 +130,7 @@ acceptance(
await click(".insert-quote");
assert.strictEqual(
query(".d-editor-input").value.trim(),
- `[quote=\"Uwe Keim, post:1, topic:280, username:uwe_keim\"]
+ `[quote=\"uwe_keim, post:1, topic:280\"]
Testing countdown [date=2022-06-21 time=09:30:00 format="LL" timezone="Australia/Brisbane" countdown="true"]
Testing recurring [date=2022-06-22 timezone="Australia/Brisbane" recurring="2.weeks"]
diff --git a/plugins/discourse-presence/test/javascripts/acceptance/discourse-presence-test.js b/plugins/discourse-presence/test/javascripts/acceptance/discourse-presence-test.js
index 72c9d9e18f..9487e88c96 100644
--- a/plugins/discourse-presence/test/javascripts/acceptance/discourse-presence-test.js
+++ b/plugins/discourse-presence/test/javascripts/acceptance/discourse-presence-test.js
@@ -21,6 +21,9 @@ acceptance("Discourse Presence Plugin", function (needs) {
test("Doesn't break topic creation", async function (assert) {
await visit("/");
await click("#create-topic");
+ const categoryChooser = selectKit(".category-chooser");
+ await categoryChooser.expand();
+ await categoryChooser.selectRowByValue(2);
await fillIn("#reply-title", "Internationalization Localization");
await fillIn(
".d-editor-input",