import Singleton from "discourse/mixins/singleton"; QUnit.module("mixin:singleton"); QUnit.test("current", assert => { var DummyModel = Ember.Object.extend({}); DummyModel.reopenClass(Singleton); var current = DummyModel.current(); assert.present(current, "current returns the current instance"); assert.equal( current, DummyModel.current(), "calling it again returns the same instance" ); assert.notEqual( current, DummyModel.create({}), "we can create other instances that are not the same as current" ); }); QUnit.test("currentProp reading", assert => { var DummyModel = Ember.Object.extend({}); DummyModel.reopenClass(Singleton); var current = DummyModel.current(); assert.blank( DummyModel.currentProp("evil"), "by default attributes are blank" ); current.set("evil", "trout"); assert.equal( DummyModel.currentProp("evil"), "trout", "after changing the instance, the value is set" ); }); QUnit.test("currentProp writing", assert => { var DummyModel = Ember.Object.extend({}); DummyModel.reopenClass(Singleton); assert.blank( DummyModel.currentProp("adventure"), "by default attributes are blank" ); var result = DummyModel.currentProp("adventure", "time"); assert.equal(result, "time", "it returns the new value"); assert.equal( DummyModel.currentProp("adventure"), "time", "after calling currentProp the value is set" ); DummyModel.currentProp("count", 0); assert.equal(DummyModel.currentProp("count"), 0, "we can set the value to 0"); DummyModel.currentProp("adventure", null); assert.equal( DummyModel.currentProp("adventure"), null, "we can set the value to null" ); }); QUnit.test("createCurrent", assert => { var Shoe = Ember.Object.extend({}); Shoe.reopenClass(Singleton, { createCurrent: function() { return Shoe.create({ toes: 5 }); } }); assert.equal( Shoe.currentProp("toes"), 5, "it created the class using `createCurrent`" ); }); QUnit.test("createCurrent that returns null", assert => { var Missing = Ember.Object.extend({}); Missing.reopenClass(Singleton, { createCurrent: function() { return null; } }); assert.blank(Missing.current(), "it doesn't return an instance"); assert.blank( Missing.currentProp("madeup"), "it won't raise an error asking for a property. Will just return null." ); });