QUnit.module("rest-model"); import createStore from "helpers/create-store"; import RestModel from "discourse/models/rest"; QUnit.test("munging", assert => { const store = createStore(); const Grape = RestModel.extend(); Grape.reopenClass({ munge: function(json) { json.inverse = 1 - json.percent; return json; } }); var g = Grape.create({ store, percent: 0.4 }); assert.equal(g.get("inverse"), 0.6, "it runs `munge` on `create`"); }); QUnit.test("update", assert => { const store = createStore(); return store.find("widget", 123).then(function(widget) { assert.equal(widget.get("name"), "Trout Lure"); assert.ok(!widget.get("isSaving"), "it is not saving"); const promise = widget.update({ name: "new name" }); assert.ok(widget.get("isSaving"), "it is saving"); promise.then(function(result) { assert.ok(!widget.get("isSaving"), "it is no longer saving"); assert.equal(widget.get("name"), "new name"); assert.ok(result.target, "it has a reference to the record"); assert.equal(result.target.name, widget.get("name")); }); }); }); QUnit.test("updating simultaneously", assert => { assert.expect(2); const store = createStore(); return store.find("widget", 123).then(function(widget) { const firstPromise = widget.update({ name: "new name" }); const secondPromise = widget.update({ name: "new name" }); firstPromise.then(function() { assert.ok(true, "the first promise succeeeds"); }); secondPromise.catch(function() { assert.ok(true, "the second promise fails"); }); }); }); QUnit.test("save new", assert => { const store = createStore(); const widget = store.createRecord("widget"); assert.ok(widget.get("isNew"), "it is a new record"); assert.ok(!widget.get("isCreated"), "it is not created"); assert.ok(!widget.get("isSaving"), "it is not saving"); const promise = widget.save({ name: "Evil Widget" }); assert.ok(widget.get("isSaving"), "it is not saving"); return promise.then(function(result) { assert.ok(!widget.get("isSaving"), "it is no longer saving"); assert.ok(widget.get("id"), "it has an id"); assert.ok(widget.get("name"), "Evil Widget"); assert.ok(widget.get("isCreated"), "it is created"); assert.ok(!widget.get("isNew"), "it is no longer new"); assert.ok(result.target, "it has a reference to the record"); assert.equal(result.target.name, widget.get("name")); }); }); QUnit.test("creating simultaneously", assert => { assert.expect(2); const store = createStore(); const widget = store.createRecord("widget"); const firstPromise = widget.save({ name: "Evil Widget" }); const secondPromise = widget.save({ name: "Evil Widget" }); firstPromise.then(function() { assert.ok(true, "the first promise succeeeds"); }); secondPromise.catch(function() { assert.ok(true, "the second promise fails"); }); }); QUnit.test("destroyRecord", assert => { const store = createStore(); return store.find("widget", 123).then(function(widget) { widget.destroyRecord().then(function(result) { assert.ok(result); }); }); });