import { setting, propertyEqual, propertyNotEqual, fmt, i18n, url } from "discourse/lib/computed"; QUnit.module("lib:computed", { beforeEach() { sandbox.stub(I18n, "t", function(scope) { return "%@ translated: " + scope; }); }, afterEach() { I18n.t.restore(); } }); QUnit.test("setting", assert => { var t = Em.Object.extend({ vehicle: setting("vehicle"), missingProp: setting("madeUpThing") }).create(); Discourse.SiteSettings.vehicle = "airplane"; assert.equal( t.get("vehicle"), "airplane", "it has the value of the site setting" ); assert.ok( !t.get("missingProp"), "it is falsy when the site setting is not defined" ); }); QUnit.test("propertyEqual", assert => { var t = Em.Object.extend({ same: propertyEqual("cookies", "biscuits") }).create({ cookies: 10, biscuits: 10 }); assert.ok(t.get("same"), "it is true when the properties are the same"); t.set("biscuits", 9); assert.ok(!t.get("same"), "it isn't true when one property is different"); }); QUnit.test("propertyNotEqual", assert => { var t = Em.Object.extend({ diff: propertyNotEqual("cookies", "biscuits") }).create({ cookies: 10, biscuits: 10 }); assert.ok(!t.get("diff"), "it isn't true when the properties are the same"); t.set("biscuits", 9); assert.ok(t.get("diff"), "it is true when one property is different"); }); QUnit.test("fmt", assert => { var t = Em.Object.extend({ exclaimyUsername: fmt("username", "!!! %@ !!!"), multiple: fmt("username", "mood", "%@ is %@") }).create({ username: "eviltrout", mood: "happy" }); assert.equal( t.get("exclaimyUsername"), "!!! eviltrout !!!", "it inserts the string" ); assert.equal( t.get("multiple"), "eviltrout is happy", "it inserts multiple strings" ); t.set("username", "codinghorror"); assert.equal( t.get("multiple"), "codinghorror is happy", "it supports changing properties" ); t.set("mood", "ecstatic"); assert.equal( t.get("multiple"), "codinghorror is ecstatic", "it supports changing another property" ); }); QUnit.test("i18n", assert => { var t = Em.Object.extend({ exclaimyUsername: i18n("username", "!!! %@ !!!"), multiple: i18n("username", "mood", "%@ is %@") }).create({ username: "eviltrout", mood: "happy" }); assert.equal( t.get("exclaimyUsername"), "%@ translated: !!! eviltrout !!!", "it inserts the string and then translates" ); assert.equal( t.get("multiple"), "%@ translated: eviltrout is happy", "it inserts multiple strings and then translates" ); t.set("username", "codinghorror"); assert.equal( t.get("multiple"), "%@ translated: codinghorror is happy", "it supports changing properties" ); t.set("mood", "ecstatic"); assert.equal( t.get("multiple"), "%@ translated: codinghorror is ecstatic", "it supports changing another property" ); }); QUnit.test("url", assert => { var t, testClass; testClass = Em.Object.extend({ userUrl: url("username", "/u/%@") }); t = testClass.create({ username: "eviltrout" }); assert.equal( t.get("userUrl"), "/u/eviltrout", "it supports urls without a prefix" ); Discourse.BaseUri = "/prefixed"; t = testClass.create({ username: "eviltrout" }); assert.equal( t.get("userUrl"), "/prefixed/u/eviltrout", "it supports urls with a prefix" ); });