diff --git a/app/assets/javascripts/discourse/app/components/ace-editor.gjs b/app/assets/javascripts/discourse/app/components/ace-editor.gjs
index 5ba00a62dd1..2a3e14f97d9 100644
--- a/app/assets/javascripts/discourse/app/components/ace-editor.gjs
+++ b/app/assets/javascripts/discourse/app/components/ace-editor.gjs
@@ -143,7 +143,6 @@ export default class AceEditor extends Component {
this.editor.$blockScrolling = Infinity;
this.editor.renderer.setScrollMargin(10, 10);
- element.setAttribute("data-editor", this.editor);
this.changeDisabledState();
this.warnSCSSDeprecations();
@@ -185,7 +184,7 @@ export default class AceEditor extends Component {
this.editor?.container.parentNode.parentNode.setAttribute(
"data-disabled",
- this.args.disabled
+ !!this.args.disabled
);
}
diff --git a/app/assets/javascripts/discourse/tests/integration/components/admin-theme-settings-editor-test.js b/app/assets/javascripts/discourse/tests/integration/components/admin-theme-settings-editor-test.gjs
similarity index 51%
rename from app/assets/javascripts/discourse/tests/integration/components/admin-theme-settings-editor-test.js
rename to app/assets/javascripts/discourse/tests/integration/components/admin-theme-settings-editor-test.gjs
index 050ec713d74..3f4f2cc8a51 100644
--- a/app/assets/javascripts/discourse/tests/integration/components/admin-theme-settings-editor-test.js
+++ b/app/assets/javascripts/discourse/tests/integration/components/admin-theme-settings-editor-test.gjs
@@ -1,39 +1,13 @@
-import { render, waitUntil } from "@ember/test-helpers";
-import { hbs } from "ember-cli-htmlbars";
+import { render } from "@ember/test-helpers";
import { module, test } from "qunit";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
+import ThemeSettingsEditor from "admin/components/theme-settings-editor";
-/*
-example valid content for ace editor:
-[
- {
- "setting": "whitelisted_fruits",
- "value": "uudu"
- },
- {
- "setting": "favorite_fruit",
- "value": "orange"
- },
- {
- "setting": "year",
- "value": 1992
- },
- {
- "setting": "banner_links",
- "value": "[{\"icon\":\"info-circle\",\"text\":\"about this site\",\"url\":\"/faq\"}, {\"icon\":\"users\",\"text\":\"meet our staff\",\"url\":\"/about\"}, {\"icon\":\"star\",\"text\":\"your preferences\",\"url\":\"/my/preferences\"}]"
- }
-]
- */
-
-function glimmerComponent(owner, componentName, args = {}) {
- const { class: componentClass } = owner.factoryFor(
- `component:${componentName}`
- );
- let componentManager = owner.lookup("component-manager:glimmer");
- let component = componentManager.createComponent(componentClass, {
+function glimmerComponent(owner, componentClass, args = {}) {
+ const componentManager = owner.lookup("component-manager:glimmer");
+ return componentManager.createComponent(componentClass, {
named: args,
});
- return component;
}
module(
@@ -41,38 +15,35 @@ module(
function (hooks) {
setupRenderingTest(hooks);
- let model;
-
test("renders passed json model object into string in the ace editor", async function (assert) {
- await render(hbs``);
+ const model = {
+ model: {
+ settings: [
+ { setting: "setting1", value: "value1" },
+ { setting: "setting2", value: "value2" },
+ ],
+ },
+ };
- await waitUntil(() => document.querySelectorAll(".ace_line")[0]);
+ await render(
+
+ );
assert.dom(".ace_line").hasText("[");
});
test("input is valid json", async function (assert) {
- const component = glimmerComponent(this.owner, "theme-settings-editor", {
+ const component = glimmerComponent(this.owner, ThemeSettingsEditor, {
model: [],
});
+
component.editedContent = "foo";
component.save();
assert.strictEqual(component.errors[0].setting, "Syntax Error");
});
test("'setting' key is present for each setting", async function (assert) {
- const component = glimmerComponent(this.owner, "theme-settings-editor", {
+ const component = glimmerComponent(this.owner, ThemeSettingsEditor, {
model: [],
});
@@ -82,7 +53,7 @@ module(
});
test("'value' key is present for each setting", async function (assert) {
- const component = glimmerComponent(this.owner, "theme-settings-editor", {
+ const component = glimmerComponent(this.owner, ThemeSettingsEditor, {
model: [],
});
@@ -92,26 +63,25 @@ module(
});
test("only 'setting' and 'value' keys are present, no others", async function (assert) {
- const component = glimmerComponent(this.owner, "theme-settings-editor", {
+ const component = glimmerComponent(this.owner, ThemeSettingsEditor, {
model: [],
});
- component.editedContent = JSON.stringify([{ otherkey: "otherkey1" }]);
+ component.editedContent = JSON.stringify([{ other_key: "other-key-1" }]);
component.save();
assert.strictEqual(component.errors[0].setting, "Syntax Error");
});
test("no settings are deleted", async function (assert) {
- model = {
+ const component = glimmerComponent(this.owner, ThemeSettingsEditor, {
model: {
- settings: [
- { setting: "foo", value: "foo" },
- { setting: "bar", value: "bar" },
- ],
+ model: {
+ settings: [
+ { setting: "foo", value: "foo" },
+ { setting: "bar", value: "bar" },
+ ],
+ },
},
- };
- const component = glimmerComponent(this.owner, "theme-settings-editor", {
- model,
});
component.editedContent = JSON.stringify([
@@ -123,14 +93,12 @@ module(
});
test("no settings are added", async function (assert) {
- model = {
+ const component = glimmerComponent(this.owner, ThemeSettingsEditor, {
model: {
- settings: [{ setting: "bar", value: "bar" }],
+ model: {
+ settings: [{ setting: "bar", value: "bar" }],
+ },
},
- };
-
- const component = glimmerComponent(this.owner, "theme-settings-editor", {
- model,
});
component.editedContent = JSON.stringify([
@@ -138,6 +106,7 @@ module(
{ setting: "bar", value: "bar" },
]);
component.save();
+
assert.strictEqual(component.errors[0].setting, "foo");
});
}