216 lines
5.3 KiB
JavaScript
216 lines
5.3 KiB
JavaScript
import EmberObject from "@ember/object";
|
|
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("reorder 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 = EmberObject.create({ categories: categories });
|
|
const reorderCategoriesController = this.subject({ site });
|
|
|
|
reorderCategoriesController.reorder();
|
|
|
|
reorderCategoriesController
|
|
.get("categoriesOrdered")
|
|
.forEach((category, index) => {
|
|
assert.equal(category.get("position"), index);
|
|
});
|
|
});
|
|
|
|
QUnit.test(
|
|
"reorder 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 = EmberObject.create({ categories: categories });
|
|
const reorderCategoriesController = this.subject({ site });
|
|
|
|
reorderCategoriesController.reorder();
|
|
|
|
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 = EmberObject.create({ categories: categories });
|
|
const reorderCategoriesController = this.subject({ site });
|
|
|
|
reorderCategoriesController.actions.change.call(
|
|
reorderCategoriesController,
|
|
elem1,
|
|
{ target: { 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 = EmberObject.create({ categories: categories });
|
|
const reorderCategoriesController = this.subject({ site });
|
|
|
|
reorderCategoriesController.actions.change.call(
|
|
reorderCategoriesController,
|
|
elem1,
|
|
{ target: { 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 child2 = store.createRecord("category", {
|
|
id: 5,
|
|
position: 2,
|
|
slug: "foochildchild",
|
|
parent_category_id: 4
|
|
});
|
|
|
|
const elem2 = store.createRecord("category", {
|
|
id: 2,
|
|
position: 3,
|
|
slug: "bar"
|
|
});
|
|
|
|
const elem3 = store.createRecord("category", {
|
|
id: 3,
|
|
position: 4,
|
|
slug: "test"
|
|
});
|
|
|
|
const categories = [elem1, child1, child2, elem2, elem3];
|
|
const site = EmberObject.create({ categories: categories });
|
|
const reorderCategoriesController = this.subject({ site });
|
|
|
|
reorderCategoriesController.reorder();
|
|
|
|
reorderCategoriesController.actions.moveDown.call(
|
|
reorderCategoriesController,
|
|
elem1
|
|
);
|
|
|
|
assert.deepEqual(
|
|
reorderCategoriesController.get("categoriesOrdered").mapBy("slug"),
|
|
["bar", "foo", "foochild", "foochildchild", "test"]
|
|
);
|
|
}
|
|
);
|