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/helpers/component-test.js
Bianca Nenciu 7d7551adfc
DEV: Remove user options from current user serializer (#19089)
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.
2022-12-05 18:25:30 +02:00

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);
}
}
});
}