User options were serialized at the root level of CurrentUserSerializer, but UserSerializer has a user_option field. This inconsistency caused issues in the past because user_option fields had to be duplicated on the frontend.
119 lines
3.2 KiB
JavaScript
119 lines
3.2 KiB
JavaScript
import { render } from "@ember/test-helpers";
|
|
import Session from "discourse/models/session";
|
|
import Site from "discourse/models/site";
|
|
import TopicTrackingState from "discourse/models/topic-tracking-state";
|
|
import User from "discourse/models/user";
|
|
import { autoLoadModules } from "discourse/initializers/auto-load-modules";
|
|
import QUnit, { test } from "qunit";
|
|
import { setupRenderingTest as emberSetupRenderingTest } from "ember-qunit";
|
|
import { currentSettings } from "discourse/tests/helpers/site-settings";
|
|
import { injectServiceIntoService } from "discourse/pre-initializers/inject-discourse-objects";
|
|
|
|
export function setupRenderingTest(hooks) {
|
|
emberSetupRenderingTest(hooks);
|
|
|
|
hooks.beforeEach(function () {
|
|
if (!hooks.usingDiscourseModule) {
|
|
this.siteSettings = currentSettings();
|
|
this.registry ||= this.owner.__registry__;
|
|
this.container = this.owner;
|
|
}
|
|
|
|
this.site = Site.current();
|
|
this.session = Session.current();
|
|
|
|
const currentUser = User.create({
|
|
username: "eviltrout",
|
|
name: "Robin Ward",
|
|
admin: false,
|
|
moderator: false,
|
|
groups: [
|
|
{
|
|
id: 10,
|
|
automatic: true,
|
|
name: "trust_level_0",
|
|
display_name: "trust_level_0",
|
|
},
|
|
{
|
|
id: 11,
|
|
automatic: true,
|
|
name: "trust_level_1",
|
|
display_name: "trust_level_1",
|
|
},
|
|
],
|
|
user_option: {
|
|
timezone: "Australia/Brisbane",
|
|
},
|
|
});
|
|
this.currentUser = currentUser;
|
|
this.owner.unregister("service:current-user");
|
|
this.owner.register("service:current-user", currentUser, {
|
|
instantiate: false,
|
|
});
|
|
this.owner.inject("component", "currentUser", "service:current-user");
|
|
injectServiceIntoService({
|
|
app: this.owner.application,
|
|
property: "currentUser",
|
|
specifier: "service:current-user",
|
|
});
|
|
|
|
this.owner.unregister("service:topic-tracking-state");
|
|
this.owner.register(
|
|
"service:topic-tracking-state",
|
|
TopicTrackingState.create({ currentUser }),
|
|
{ instantiate: false }
|
|
);
|
|
injectServiceIntoService({
|
|
app: this.owner.application,
|
|
property: "topicTrackingState",
|
|
specifier: "service:topic-tracking-state",
|
|
});
|
|
|
|
autoLoadModules(this.owner, this.registry);
|
|
this.owner.lookup("service:store");
|
|
|
|
$.fn.autocomplete = function () {};
|
|
});
|
|
}
|
|
|
|
export default function (name, hooks, opts) {
|
|
if (opts === undefined) {
|
|
opts = hooks;
|
|
}
|
|
|
|
opts = opts || {};
|
|
|
|
if (opts.skip) {
|
|
return;
|
|
}
|
|
|
|
if (typeof opts.template === "string") {
|
|
let testName = QUnit.config.currentModule.name + " " + name;
|
|
// eslint-disable-next-line
|
|
console.warn(
|
|
`${testName} skipped; template must be compiled and not a string`
|
|
);
|
|
return;
|
|
}
|
|
|
|
test(name, async function (assert) {
|
|
if (opts.anonymous) {
|
|
this.owner.unregister("service:current-user");
|
|
}
|
|
|
|
if (opts.beforeEach) {
|
|
const store = this.owner.lookup("service:store");
|
|
await opts.beforeEach.call(this, store);
|
|
}
|
|
|
|
try {
|
|
await render(opts.template);
|
|
await opts.test.call(this, assert);
|
|
} finally {
|
|
if (opts.afterEach) {
|
|
await opts.afterEach.call(opts);
|
|
}
|
|
}
|
|
});
|
|
}
|