This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/tests/acceptance/admin-site-settings-test.js
Jarek Radosz a17d54d0bf
DEV: De-arrowify tests (#11068)
Using arrow functions changes `this` context, which is undesired in tests, e.g. it makes it impossible to setup things like pretender (`this.server`) in `beforeEach` hooks.

Ember guides always use classic functions in examples (e.g. https://guides.emberjs.com/release/testing/test-types/), and that's what it uses in its own test suite, as do various addons and ember apps.

It was also already used in Discourse where `this` was required. Moving forward, it will be needed in more places as we migrate toward ember-cli.

(I might later add a custom rule to eslint-discourse-ember to enforce this)
2020-10-30 17:37:32 +01:00

143 lines
4.4 KiB
JavaScript

import { exists } from "discourse/tests/helpers/qunit-helpers";
import { fillIn, click, visit, currentURL } from "@ember/test-helpers";
import { test } from "qunit";
import { acceptance, count } from "discourse/tests/helpers/qunit-helpers";
import siteSettingFixture from "discourse/tests/fixtures/site-settings";
acceptance("Admin - Site Settings", function (needs) {
let updatedTitle;
needs.user();
needs.pretender((server, helper) => {
server.put("/admin/site_settings/title", (body) => {
updatedTitle = body.requestBody.split("=")[1];
return helper.response({ success: "OK" });
});
server.get("/admin/site_settings", () => {
const fixtures = siteSettingFixture["/admin/site_settings"].site_settings;
const titleSetting = Object.assign({}, fixtures[0]);
if (updatedTitle) {
titleSetting.value = updatedTitle;
}
const response = {
site_settings: [titleSetting, ...fixtures.slice(1)],
};
return helper.response(response);
});
});
needs.hooks.beforeEach(() => {
updatedTitle = null;
});
test("upload site setting", async function (assert) {
await visit("/admin/site_settings");
assert.ok(
exists(".row.setting.upload .image-uploader"),
"image uploader is present"
);
assert.ok(exists(".row.setting.upload .undo"), "undo button is present");
});
test("changing value updates dirty state", async function (assert) {
await visit("/admin/site_settings");
await fillIn("#setting-filter", " title ");
assert.equal(count(".row.setting"), 1, "filter returns 1 site setting");
assert.ok(!exists(".row.setting.overridden"), "setting isn't overriden");
await fillIn(".input-setting-string", "Test");
await click("button.cancel");
assert.ok(
!exists(".row.setting.overridden"),
"canceling doesn't mark setting as overriden"
);
await fillIn(".input-setting-string", "Test");
await click("button.ok");
assert.ok(
exists(".row.setting.overridden"),
"saving marks setting as overriden"
);
await click("button.undo");
assert.ok(
!exists(".row.setting.overridden"),
"setting isn't marked as overriden after undo"
);
await click("button.cancel");
assert.ok(
exists(".row.setting.overridden"),
"setting is marked as overriden after cancel"
);
await click("button.undo");
await click("button.ok");
assert.ok(
!exists(".row.setting.overridden"),
"setting isn't marked as overriden after undo"
);
await fillIn(".input-setting-string", "Test");
await keyEvent(".input-setting-string", "keydown", 13); // enter
assert.ok(
exists(".row.setting.overridden"),
"saving via Enter key marks setting as overriden"
);
});
test("always shows filtered site settings if a filter is set", async function (assert) {
await visit("/admin/site_settings");
await fillIn("#setting-filter", "title");
assert.equal(count(".row.setting"), 1);
// navigate away to the "Dashboard" page
await click(".nav.nav-pills li:nth-child(1) a");
assert.equal(count(".row.setting"), 0);
// navigate back to the "Settings" page
await click(".nav.nav-pills li:nth-child(2) a");
assert.equal(count(".row.setting"), 1);
});
test("filter settings by plugin name", async function (assert) {
await visit("/admin/site_settings");
await fillIn("#setting-filter", "plugin:discourse-logo");
assert.equal(count(".row.setting"), 1);
// inexistent plugin
await fillIn("#setting-filter", "plugin:discourse-plugin");
assert.equal(count(".row.setting"), 0);
});
test("category name is preserved", async function (assert) {
await visit("admin/site_settings/category/basic?filter=menu");
assert.equal(
currentURL(),
"admin/site_settings/category/basic?filter=menu"
);
});
test("shows all_results if current category has none", async function (assert) {
await visit("admin/site_settings");
await click(".admin-nav .basic a");
assert.equal(currentURL(), "/admin/site_settings/category/basic");
await fillIn("#setting-filter", "menu");
assert.equal(
currentURL(),
"/admin/site_settings/category/basic?filter=menu"
);
await fillIn("#setting-filter", "contact");
assert.equal(
currentURL(),
"/admin/site_settings/category/all_results?filter=contact"
);
});
});