88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
import { discourseModule } from "discourse/tests/helpers/qunit-helpers";
|
|
import { test } from "qunit";
|
|
import EmberObject from "@ember/object";
|
|
import discourseComputed from "discourse-common/utils/decorators";
|
|
import { withPluginApi } from "discourse/lib/plugin-api";
|
|
|
|
discourseModule("Unit | Utility | plugin-api", function () {
|
|
test("modifyClass works with classic Ember objects", function (assert) {
|
|
const TestThingy = EmberObject.extend({
|
|
@discourseComputed
|
|
prop() {
|
|
return "hello";
|
|
},
|
|
});
|
|
|
|
this.registry.register("test-thingy:main", TestThingy);
|
|
|
|
withPluginApi("1.1.0", (api) => {
|
|
api.modifyClass("test-thingy:main", {
|
|
pluginId: "plugin-api-test",
|
|
|
|
@discourseComputed
|
|
prop() {
|
|
return `${this._super(...arguments)} there`;
|
|
},
|
|
});
|
|
});
|
|
|
|
const thingy = this.container.lookup("test-thingy:main");
|
|
assert.strictEqual(thingy.prop, "hello there");
|
|
});
|
|
|
|
test("modifyClass works with native class Ember objects", function (assert) {
|
|
class NativeTestThingy extends EmberObject {
|
|
@discourseComputed
|
|
prop() {
|
|
return "howdy";
|
|
}
|
|
}
|
|
|
|
this.registry.register("native-test-thingy:main", NativeTestThingy);
|
|
|
|
withPluginApi("1.1.0", (api) => {
|
|
api.modifyClass("native-test-thingy:main", {
|
|
pluginId: "plugin-api-test",
|
|
|
|
@discourseComputed
|
|
prop() {
|
|
return `${this._super(...arguments)} partner`;
|
|
},
|
|
});
|
|
});
|
|
|
|
const thingy = this.container.lookup("native-test-thingy:main");
|
|
assert.strictEqual(thingy.prop, "howdy partner");
|
|
});
|
|
|
|
test("modifyClass works with native classes", function (assert) {
|
|
class ClassTestThingy {
|
|
get keep() {
|
|
return "hey!";
|
|
}
|
|
|
|
get prop() {
|
|
return "top of the morning";
|
|
}
|
|
}
|
|
|
|
this.registry.register("class-test-thingy:main", new ClassTestThingy(), {
|
|
instantiate: false,
|
|
});
|
|
|
|
withPluginApi("1.1.0", (api) => {
|
|
api.modifyClass("class-test-thingy:main", {
|
|
pluginId: "plugin-api-test",
|
|
|
|
get prop() {
|
|
return "g'day";
|
|
},
|
|
});
|
|
});
|
|
|
|
const thingy = this.container.lookup("class-test-thingy:main");
|
|
assert.strictEqual(thingy.keep, "hey!");
|
|
assert.strictEqual(thingy.prop, "g'day");
|
|
});
|
|
});
|