discourse/test/javascripts/models/store-test.js

Failed to ignore revisions in .git-blame-ignore-revs.

191 lines
5.9 KiB
JavaScript
Raw Normal View History

2018-06-15 23:03:24 +08:00
QUnit.module("service:store");
2015-03-07 01:37:24 +08:00
2018-06-15 23:03:24 +08:00
import createStore from "helpers/create-store";
2015-03-07 01:37:24 +08:00
2018-06-15 23:03:24 +08:00
QUnit.test("createRecord", assert => {
2015-03-07 01:37:24 +08:00
const store = createStore();
2018-06-15 23:03:24 +08:00
const widget = store.createRecord("widget", { id: 111, name: "hello" });
2015-04-10 02:54:17 +08:00
2018-06-15 23:03:24 +08:00
assert.ok(!widget.get("isNew"), "it is not a new record");
assert.equal(widget.get("name"), "hello");
assert.equal(widget.get("id"), 111);
2015-03-07 01:37:24 +08:00
});
2018-06-15 23:03:24 +08:00
QUnit.test("createRecord without an `id`", assert => {
const store = createStore();
2018-06-15 23:03:24 +08:00
const widget = store.createRecord("widget", { name: "hello" });
2018-06-15 23:03:24 +08:00
assert.ok(widget.get("isNew"), "it is a new record");
assert.ok(!widget.get("id"), "there is no id");
});
2017-06-15 01:57:58 +08:00
QUnit.test("createRecord doesn't modify the input `id` field", assert => {
const store = createStore();
2018-06-15 23:03:24 +08:00
const widget = store.createRecord("widget", { id: 1, name: "hello" });
2018-06-15 23:03:24 +08:00
const obj = { id: 1, name: "something" };
2018-06-15 23:03:24 +08:00
const other = store.createRecord("widget", obj);
assert.equal(widget, other, "returns the same record");
assert.equal(widget.name, "something", "it updates the properties");
assert.equal(obj.id, 1, "it does not remove the id from the input");
});
2018-06-15 23:03:24 +08:00
QUnit.test("createRecord without attributes", assert => {
const store = createStore();
2018-06-15 23:03:24 +08:00
const widget = store.createRecord("widget");
2018-06-15 23:03:24 +08:00
assert.ok(!widget.get("id"), "there is no id");
assert.ok(widget.get("isNew"), "it is a new record");
});
2018-06-15 23:03:24 +08:00
QUnit.test(
"createRecord with a record as attributes returns that record from the map",
assert => {
const store = createStore();
const widget = store.createRecord("widget", { id: 33 });
const secondWidget = store.createRecord("widget", { id: 33 });
2018-06-15 23:03:24 +08:00
assert.equal(widget, secondWidget, "they should be the same");
}
);
QUnit.test("find", async assert => {
2015-03-07 01:37:24 +08:00
const store = createStore();
2018-03-29 14:57:10 +08:00
const widget = await store.find("widget", 123);
assert.equal(widget.get("name"), "Trout Lure");
assert.equal(widget.get("id"), 123);
assert.ok(!widget.get("isNew"), "found records are not new");
assert.equal(widget.get("extras.hello"), "world", "extra attributes are set");
// A second find by id returns the same object
const widget2 = await store.find("widget", 123);
assert.equal(widget, widget2);
assert.equal(widget.get("extras.hello"), "world", "extra attributes are set");
});
2015-03-07 01:37:24 +08:00
QUnit.test("find with object id", async assert => {
const store = createStore();
const widget = await store.find("widget", { id: 123 });
assert.equal(widget.get("firstObject.name"), "Trout Lure");
});
QUnit.test("find with query param", async assert => {
const store = createStore();
const widget = await store.find("widget", { name: "Trout Lure" });
assert.equal(widget.get("firstObject.id"), 123);
2015-03-07 01:37:24 +08:00
});
QUnit.test("findStale with no stale results", async assert => {
const store = createStore();
2018-06-15 23:03:24 +08:00
const stale = store.findStale("widget", { name: "Trout Lure" });
2018-06-15 23:03:24 +08:00
assert.ok(!stale.hasResults, "there are no stale results");
assert.ok(!stale.results, "results are present");
const widget = await stale.refresh();
assert.equal(
widget.get("firstObject.id"),
123,
"a `refresh()` method provides results for stale"
);
});
QUnit.test("update", async assert => {
const store = createStore();
const result = await store.update("widget", 123, { name: "hello" });
assert.ok(result);
});
QUnit.test("update with a multi world name", async assert => {
2015-07-31 02:52:53 +08:00
const store = createStore();
const result = await store.update("cool-thing", 123, { name: "hello" });
assert.ok(result);
assert.equal(result.payload.name, "hello");
2015-07-31 02:52:53 +08:00
});
QUnit.test("findAll", async assert => {
2015-03-07 01:37:24 +08:00
const store = createStore();
const result = await store.findAll("widget");
assert.equal(result.get("length"), 2);
const widget = result.findBy("id", 124);
assert.ok(!widget.get("isNew"), "found records are not new");
assert.equal(widget.get("name"), "Evil Repellant");
2015-03-07 01:37:24 +08:00
});
QUnit.test("destroyRecord", async assert => {
2015-03-07 01:37:24 +08:00
const store = createStore();
const widget = await store.find("widget", 123);
assert.ok(await store.destroyRecord("widget", widget));
2015-03-07 01:37:24 +08:00
});
QUnit.test("destroyRecord when new", async assert => {
const store = createStore();
const widget = store.createRecord("widget", { name: "hello" });
assert.ok(await store.destroyRecord("widget", widget));
});
QUnit.test("find embedded", async assert => {
const store = createStore();
const fruit = await store.find("fruit", 1);
assert.ok(fruit.get("farmer"), "it has the embedded object");
const fruitCols = fruit.get("colors");
assert.equal(fruitCols.length, 2);
assert.equal(fruitCols[0].get("id"), 1);
assert.equal(fruitCols[1].get("id"), 2);
assert.ok(fruit.get("category"), "categories are found automatically");
});
QUnit.test("embedded records can be cleared", async assert => {
const store = createStore();
let fruit = await store.find("fruit", 4);
fruit.set("farmer", { dummy: "object" });
fruit = await store.find("fruit", 4);
assert.ok(!fruit.get("farmer"));
});
QUnit.test("meta types", async assert => {
const store = createStore();
const barn = await store.find("barn", 1);
assert.equal(
barn.get("owner.name"),
"Old MacDonald",
"it has the embedded farmer"
);
});
QUnit.test("findAll embedded", async assert => {
const store = createStore();
const fruits = await store.findAll("fruit");
assert.equal(fruits.objectAt(0).get("farmer.name"), "Old MacDonald");
assert.equal(
fruits.objectAt(0).get("farmer"),
fruits.objectAt(1).get("farmer"),
"points at the same object"
);
assert.equal(
fruits.get("extras.hello"),
"world",
"it can supply extra information"
);
const fruitCols = fruits.objectAt(0).get("colors");
assert.equal(fruitCols.length, 2);
assert.equal(fruitCols[0].get("id"), 1);
assert.equal(fruitCols[1].get("id"), 2);
assert.equal(fruits.objectAt(2).get("farmer.name"), "Luke Skywalker");
});
QUnit.test("custom primaryKey", async assert => {
const store = createStore();
const cats = await store.findAll("cat");
assert.equal(cats.objectAt(0).name, "souna");
});