discourse/test/javascripts/controllers/reorder-categories-test.js.es6

208 lines
5.1 KiB
JavaScript

import { mapRoutes } from "discourse/mapping-router";
import createStore from "helpers/create-store";
moduleFor("controller:reorder-categories", "controller:reorder-categories", {
beforeEach() {
this.registry.register("router:main", mapRoutes());
},
needs: ["controller:modal"]
});
QUnit.test("fixIndices set unique position number", function(assert) {
const store = createStore();
const categories = [];
for (let i = 0; i < 3; ++i) {
categories.push(store.createRecord("category", { id: i, position: 0 }));
}
const site = Ember.Object.create({ categories: categories });
const reorderCategoriesController = this.subject({ site });
reorderCategoriesController.fixIndices();
reorderCategoriesController
.get("categoriesOrdered")
.forEach((category, index) => {
assert.equal(category.get("position"), index);
});
});
QUnit.test(
"fixIndices places subcategories after their parent categories, while maintaining the relative order",
function(assert) {
const store = createStore();
const parent = store.createRecord("category", {
id: 1,
position: 1,
slug: "parent"
});
const child1 = store.createRecord("category", {
id: 2,
position: 3,
slug: "child1",
parent_category_id: 1
});
const child2 = store.createRecord("category", {
id: 3,
position: 0,
slug: "child2",
parent_category_id: 1
});
const other = store.createRecord("category", {
id: 4,
position: 2,
slug: "other"
});
const categories = [child2, parent, other, child1];
const expectedOrderSlugs = ["parent", "child2", "child1", "other"];
const site = Ember.Object.create({ categories: categories });
const reorderCategoriesController = this.subject({ site });
reorderCategoriesController.fixIndices();
assert.deepEqual(
reorderCategoriesController.get("categoriesOrdered").mapBy("slug"),
expectedOrderSlugs
);
}
);
QUnit.test(
"changing the position number of a category should place it at given position",
function(assert) {
const store = createStore();
const elem1 = store.createRecord("category", {
id: 1,
position: 0,
slug: "foo"
});
const elem2 = store.createRecord("category", {
id: 2,
position: 1,
slug: "bar"
});
const elem3 = store.createRecord("category", {
id: 3,
position: 2,
slug: "test"
});
const categories = [elem1, elem2, elem3];
const site = Ember.Object.create({ categories: categories });
const reorderCategoriesController = this.subject({ site });
reorderCategoriesController.actions.change.call(
reorderCategoriesController,
elem1,
{ target: "<input value='2'>" }
);
assert.deepEqual(
reorderCategoriesController.get("categoriesOrdered").mapBy("slug"),
["test", "bar", "foo"]
);
}
);
QUnit.test(
"changing the position number of a category should place it at given position and respect children",
function(assert) {
const store = createStore();
const elem1 = store.createRecord("category", {
id: 1,
position: 0,
slug: "foo"
});
const child1 = store.createRecord("category", {
id: 4,
position: 1,
slug: "foochild",
parent_category_id: 1
});
const elem2 = store.createRecord("category", {
id: 2,
position: 2,
slug: "bar"
});
const elem3 = store.createRecord("category", {
id: 3,
position: 3,
slug: "test"
});
const categories = [elem1, child1, elem2, elem3];
const site = Ember.Object.create({ categories: categories });
const reorderCategoriesController = this.subject({ site });
reorderCategoriesController.actions.change.call(
reorderCategoriesController,
elem1,
{ target: "<input value='3'>" }
);
assert.deepEqual(
reorderCategoriesController.get("categoriesOrdered").mapBy("slug"),
["test", "bar", "foo", "foochild"]
);
}
);
QUnit.test(
"changing the position through click on arrow of a category should place it at given position and respect children",
function(assert) {
const store = createStore();
const elem1 = store.createRecord("category", {
id: 1,
position: 0,
slug: "foo"
});
const child1 = store.createRecord("category", {
id: 4,
position: 1,
slug: "foochild",
parent_category_id: 1
});
const elem2 = store.createRecord("category", {
id: 2,
position: 2,
slug: "bar"
});
const elem3 = store.createRecord("category", {
id: 3,
position: 3,
slug: "test"
});
const categories = [elem1, child1, elem2, elem3];
const site = Ember.Object.create({ categories: categories });
const reorderCategoriesController = this.subject({ site });
reorderCategoriesController.fixIndices();
reorderCategoriesController.actions.moveDown.call(
reorderCategoriesController,
elem1
);
assert.deepEqual(
reorderCategoriesController.get("categoriesOrdered").mapBy("slug"),
["bar", "foo", "foochild", "test"]
);
}
);