diff --git a/app/assets/javascripts/discourse/controllers/reorder-categories.js.es6 b/app/assets/javascripts/discourse/controllers/reorder-categories.js.es6
index 6c246e031cb..16d93523c67 100644
--- a/app/assets/javascripts/discourse/controllers/reorder-categories.js.es6
+++ b/app/assets/javascripts/discourse/controllers/reorder-categories.js.es6
@@ -85,8 +85,7 @@ export default Ember.Controller.extend(ModalFunctionality, Ember.Evented, {
actions: {
change(cat, e) {
let position = parseInt($(e.target).val());
- cat.set("position", position);
- this.fixIndices();
+ this.moveDir(cat, position - this.get("categoriesOrdered").indexOf(cat));
},
moveUp(cat) {
diff --git a/test/javascripts/controllers/reorder-categories-test.js.es6 b/test/javascripts/controllers/reorder-categories-test.js.es6
index 2e03938dc34..96941be15ca 100644
--- a/test/javascripts/controllers/reorder-categories-test.js.es6
+++ b/test/javascripts/controllers/reorder-categories-test.js.es6
@@ -70,3 +70,90 @@ QUnit.test(
);
}
);
+
+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: "" }
+ );
+
+ 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: "" }
+ );
+
+ assert.deepEqual(
+ reorderCategoriesController.get("categoriesOrdered").mapBy("slug"),
+ ["test", "bar", "foo", "foochild"]
+ );
+ }
+);