diff --git a/app/assets/javascripts/admin/addon/components/site-setting.gjs b/app/assets/javascripts/admin/addon/components/site-setting.gjs index 0b989cacff710..0d43efbe51285 100644 --- a/app/assets/javascripts/admin/addon/components/site-setting.gjs +++ b/app/assets/javascripts/admin/addon/components/site-setting.gjs @@ -339,6 +339,7 @@ export default class SiteSettingComponent extends Component { diff --git a/app/assets/javascripts/admin/addon/components/theme-site-setting-editor.gjs b/app/assets/javascripts/admin/addon/components/theme-site-setting-editor.gjs index c2170c1b66b1d..9d245e6d1974a 100644 --- a/app/assets/javascripts/admin/addon/components/theme-site-setting-editor.gjs +++ b/app/assets/javascripts/admin/addon/components/theme-site-setting-editor.gjs @@ -5,6 +5,13 @@ import SiteSettingComponent from "./site-setting"; export default class ThemeSiteSettingEditor extends SiteSettingComponent { @service toasts; + get staffLogFilter() { + return { + subject: `${this.args.model.name}: ${this.setting.setting}`, + action_name: "change_theme_site_setting", + }; + } + _save() { return this.setting .updateSetting(this.args.model.id, this.buffered.get("value")) diff --git a/app/assets/javascripts/discourse/tests/integration/components/site-setting-test.gjs b/app/assets/javascripts/discourse/tests/integration/components/site-setting-test.gjs index cc71e0b64f053..3416180d4948d 100644 --- a/app/assets/javascripts/discourse/tests/integration/components/site-setting-test.gjs +++ b/app/assets/javascripts/discourse/tests/integration/components/site-setting-test.gjs @@ -1,4 +1,10 @@ -import { click, fillIn, render, typeIn } from "@ember/test-helpers"; +import { + click, + fillIn, + render, + triggerEvent, + typeIn, +} from "@ember/test-helpers"; import { module, skip, test } from "qunit"; import { setupRenderingTest } from "discourse/tests/helpers/component-test"; import pretender, { response } from "discourse/tests/helpers/create-pretender"; @@ -7,7 +13,7 @@ import { i18n } from "discourse-i18n"; import SiteSettingComponent from "admin/components/site-setting"; import SiteSetting from "admin/models/site-setting"; -module("Integration | Component | site-setting", function (hooks) { +module("Integration | Component | SiteSetting", function (hooks) { setupRenderingTest(hooks); test("displays host-list setting value", async function (assert) { @@ -29,7 +35,7 @@ module("Integration | Component | site-setting", function (hooks) { assert.dom(".formatted-selection").hasText("a.com, b.com"); }); - test("Error response with html_message is rendered as HTML", async function (assert) { + test("error response with html_message is rendered as HTML", async function (assert) { const self = this; this.set( @@ -56,7 +62,7 @@ module("Integration | Component | site-setting", function (hooks) { assert.dom(".validation-error").includesHtml(message); }); - test("Error response without html_message is not rendered as HTML", async function (assert) { + test("error response without html_message is not rendered as HTML", async function (assert) { const self = this; this.set( @@ -180,10 +186,38 @@ module("Integration | Component | site-setting", function (hooks) { assert.dom(".input-setting-string").hasAttribute("type", "password"); assert.dom(".setting-toggle-secret svg").hasClass("d-icon-far-eye"); }); + + test("shows link to the staff action logs for the setting on hover", async function (assert) { + const self = this; + + this.set( + "setting", + SiteSetting.create({ + setting: "enable_badges", + value: "false", + default: "true", + type: "bool", + }) + ); + + await render( + + ); + + await triggerEvent("[data-setting='enable_badges']", "mouseenter"); + + assert + .dom("[data-setting='enable_badges'] .staff-action-log-link") + .exists() + .hasAttribute( + "href", + `/admin/logs/staff_action_logs?filters=${encodeURIComponent(JSON.stringify({ subject: "enable_badges", action_name: "change_site_setting" }))}&force_refresh=true` + ); + }); }); module( - "Integration | Component | site-setting | file_size_restriction type", + "Integration | Component | SiteSetting | file_size_restriction type", function (hooks) { setupRenderingTest(hooks); @@ -434,7 +468,7 @@ module( ); module( - "Integration | Component | site-setting | font-list type", + "Integration | Component | SiteSetting | font-list type", function (hooks) { setupRenderingTest(hooks); diff --git a/app/assets/javascripts/discourse/tests/integration/components/theme-site-setting-editor-test.gjs b/app/assets/javascripts/discourse/tests/integration/components/theme-site-setting-editor-test.gjs new file mode 100644 index 0000000000000..109e4ceaab412 --- /dev/null +++ b/app/assets/javascripts/discourse/tests/integration/components/theme-site-setting-editor-test.gjs @@ -0,0 +1,45 @@ +import { render, triggerEvent } from "@ember/test-helpers"; +import { module, test } from "qunit"; +import { setupRenderingTest } from "discourse/tests/helpers/component-test"; +import ThemeSiteSettingEditor from "admin/components/theme-site-setting-editor"; +import SiteSetting from "admin/models/site-setting"; +import Theme from "admin/models/theme"; + +module("Integration | Component | ThemeSiteSettingEditor", function (hooks) { + setupRenderingTest(hooks); + + test("shows link to the staff action logs for the setting on hover", async function (assert) { + const self = this; + + this.set( + "setting", + SiteSetting.create({ + setting: "enable_welcome_banner", + value: "false", + default: "true", + type: "bool", + }) + ); + + this.set("model", Theme.create({ name: "Test Theme" })); + + await render( + + ); + + await triggerEvent("[data-setting='enable_welcome_banner']", "mouseenter"); + + assert + .dom("[data-setting='enable_welcome_banner'] .staff-action-log-link") + .exists() + .hasAttribute( + "href", + `/admin/logs/staff_action_logs?filters=${encodeURIComponent(JSON.stringify({ subject: "Test Theme: enable_welcome_banner", action_name: "change_theme_site_setting" }))}&force_refresh=true` + ); + }); +});