Skip to content

Commit 58eb732

Browse files
Making unit test pass
1 parent e2d3cb8 commit 58eb732

File tree

6 files changed

+55
-40
lines changed

6 files changed

+55
-40
lines changed

src/core/componentBuilderHelper.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ function createSortableOption({ $attrs, callBackBuilder }) {
2626
options[`on${event}`] = eventBuilder(event);
2727
});
2828
});
29-
const draggable = `${options.draggable || ""}[data-draggable]`;
29+
const draggable = `[data-draggable]${options.draggable || ""}`;
3030
return {
31-
draggable,
32-
...options
31+
...options,
32+
draggable
3333
};
3434
}
3535

src/vuedraggable.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ const draggableComponent = defineComponent({
125125
});
126126
const targetDomElement = $el.nodeType === 1 ? $el : $el.parentElement;
127127
this._sortable = new Sortable(targetDomElement, sortableOptions);
128+
this.targetDomElement = targetDomElement;
128129
targetDomElement.__draggable_component__ = this;
129130
},
130131

@@ -215,7 +216,7 @@ const draggableComponent = defineComponent({
215216
getVmIndexFromDomIndex(domIndex) {
216217
return this.componentStructure.getVmIndexFromDomIndex(
217218
domIndex,
218-
this._sortable.el
219+
this.targetDomElement
219220
);
220221
},
221222

tests/unit/core/componentBuilderHelper.spec.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,28 @@ describe("getComponentAttributes", () => {
7171

7272
describe("createSortableOption", () => {
7373
test.each([
74-
[{ $attrs: {}, callBackBuilder: {} }, { draggable: ">*" }],
75-
[{ $attrs: { onStart: 23 }, callBackBuilder: {} }, { draggable: ">*" }],
76-
[{ $attrs: { onEnd: 23 }, callBackBuilder: {} }, { draggable: ">*" }],
74+
[{ $attrs: {}, callBackBuilder: {} }, { draggable: "[data-draggable]" }],
75+
[
76+
{ $attrs: { onStart: 23 }, callBackBuilder: {} },
77+
{ draggable: "[data-draggable]" }
78+
],
79+
[
80+
{ $attrs: { onEnd: 23 }, callBackBuilder: {} },
81+
{ draggable: "[data-draggable]" }
82+
],
7783
[
7884
{
7985
$attrs: { id: "id", class: "class", "data-app": "app" },
8086
callBackBuilder: {}
8187
},
82-
{ draggable: ">*" }
88+
{ draggable: "[data-draggable]" }
8389
],
8490
[
8591
{
8692
$attrs: { value: "43" },
8793
callBackBuilder: {}
8894
},
89-
{ value: "43", draggable: ">*" }
95+
{ value: "43", draggable: "[data-draggable]" }
9096
],
9197
[
9298
{
@@ -100,7 +106,7 @@ describe("createSortableOption", () => {
100106
{
101107
value: "43",
102108
ghostClass: "phantom",
103-
draggable: ".draggable"
109+
draggable: "[data-draggable].draggable"
104110
}
105111
],
106112
[
@@ -115,7 +121,7 @@ describe("createSortableOption", () => {
115121
},
116122
{
117123
value: "7",
118-
draggable: ".draggable",
124+
draggable: "[data-draggable].draggable",
119125
onChoose: "Choose",
120126
onClone: "Clone",
121127
onFilter: "Filter",
@@ -136,7 +142,7 @@ describe("createSortableOption", () => {
136142
},
137143
{
138144
property: "property",
139-
draggable: ">*",
145+
draggable: "[data-draggable]",
140146
onChoose: "emit-Choose",
141147
onClone: "emit-Clone",
142148
onFilter: "emit-Filter",

tests/unit/helper/DraggableWithTransition.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<template>
2-
<draggable tag="transition-group" v-model="array" :item-key="key => key">
2+
<draggable
3+
tag="transition-group"
4+
:component-data="{ tag: 'div' }"
5+
v-model="array"
6+
:item-key="key => key"
7+
>
38
<template #item="{element}">
49
<div>{{ element }}</div>
510
</template>

tests/unit/vuedraggable.integrated.spec.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import { mount, config } from "@vue/test-utils";
22
config.global.stubs["transition-group"] = false;
33
import Sortable from "sortablejs";
4+
45
jest.genMockFromModule("sortablejs");
56
jest.mock("sortablejs");
7+
68
const SortableFake = {
79
destroy: jest.fn(),
8-
option: jest.fn(),
10+
option: jest.fn()
911
};
10-
Sortable.mockImplementation(element => {
11-
console.log(element);
12-
SortableFake.el = element;
13-
return SortableFake;
14-
});
12+
Sortable.mockImplementation(() => SortableFake);
13+
14+
import draggable from "@/vuedraggable";
1515

1616
import { nextTick } from "vue";
1717
import DraggableWithList from "./helper/DraggableWithList";
@@ -20,8 +20,6 @@ import DraggableWithModel from "./helper/DraggableWithList";
2020
import DraggableWithTransition from "./helper/DraggableWithTransition";
2121
import fake from "./helper/FakeRoot";
2222

23-
import draggable from "@/vuedraggable";
24-
2523
let wrapper;
2624
let element;
2725
let vm;

tests/unit/vuedraggable.spec.js

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@ import { mount, config } from "@vue/test-utils";
22
import Sortable from "sortablejs";
33
jest.mock("sortablejs");
44
const SortableFake = {
5-
el: null,
65
destroy: jest.fn(),
76
option: jest.fn()
87
};
9-
Sortable.mockImplementation(element => {
10-
SortableFake.el = element;
11-
return SortableFake;
12-
});
8+
Sortable.mockImplementation(() => SortableFake);
139
import draggable from "@/vuedraggable";
1410
import { nextTick, h } from "vue";
1511

@@ -341,6 +337,7 @@ describe("draggable.vue when initialized with list", () => {
341337

342338
describe("when add is called", () => {
343339
let newItem;
340+
const expectedDOMAfterUpdate = `<div><header></header><div data-draggable="true">a</div><div data-draggable="true">b</div><div data-draggable="true">d</div><div data-draggable="true">c</div><footer></footer></div>`;
344341
beforeEach(async () => {
345342
await nextTick();
346343
newItem = document.createElement("div");
@@ -349,16 +346,17 @@ describe("draggable.vue when initialized with list", () => {
349346
newItem._underlying_vm_ = "d";
350347
const last = element.children[3];
351348
element.insertBefore(newItem, last);
349+
352350
const add = getEvent("onAdd");
353351
add({
354352
item: newItem,
355353
newIndex: 3
356354
});
357355
});
358356

359-
it("DOM changes should be reverted", async () => {
357+
it("DOM changes should be performed", async () => {
360358
await nextTick();
361-
expectHTML(wrapper, initialRender);
359+
expectHTML(wrapper, expectedDOMAfterUpdate);
362360
});
363361

364362
it("list should be updated", async () => {
@@ -506,6 +504,7 @@ describe("draggable.vue when initialized with list", () => {
506504
});
507505

508506
describe("when remove is called", () => {
507+
const expectedDomAfterRemove = `<div><header></header><div data-draggable="true">a</div><div data-draggable="true">c</div><footer></footer></div>`;
509508
beforeEach(() => {
510509
element.removeChild(item);
511510
const remove = getEvent("onRemove");
@@ -515,9 +514,9 @@ describe("draggable.vue when initialized with list", () => {
515514
});
516515
});
517516

518-
it("DOM changes should be reverted", async () => {
517+
it("DOM should be updated", async () => {
519518
await nextTick();
520-
expectHTML(wrapper, initialRender);
519+
expectHTML(wrapper, expectedDomAfterRemove);
521520
});
522521

523522
it("list should be updated", async () => {
@@ -544,6 +543,10 @@ describe("draggable.vue when initialized with list", () => {
544543
])(
545544
"when update is called with new index being %i",
546545
(index, expectedList) => {
546+
const expectedDomAfterUpdate = `<div><header></header>${expectedList
547+
.map(value => `<div data-draggable="true">${value}</div>`)
548+
.join("")}<footer></footer></div>`;
549+
547550
beforeEach(() => {
548551
const firstDraggable = element.children[index];
549552
element.removeChild(item);
@@ -557,9 +560,9 @@ describe("draggable.vue when initialized with list", () => {
557560
});
558561
});
559562

560-
it("DOM changes should be reverted", async () => {
563+
it("DOM should be updated", async () => {
561564
await nextTick();
562-
expectHTML(wrapper, initialRender);
565+
expectHTML(wrapper, expectedDomAfterUpdate);
563566
});
564567

565568
it("list should be updated", async () => {
@@ -1046,6 +1049,9 @@ describe("draggable.vue when initialized with a transition group", () => {
10461049
props: {
10471050
modelValue: items,
10481051
tag: "transition-group",
1052+
componentData: {
1053+
tag: "div"
1054+
},
10491055
itemKey: k => k
10501056
},
10511057
slots: {
@@ -1076,7 +1082,7 @@ describe("draggable.vue when initialized with a transition group", () => {
10761082
describe("when initiating a drag operation", () => {
10771083
let evt;
10781084
beforeEach(() => {
1079-
item = element.children[0].children[1];
1085+
item = element.children[1];
10801086
evt = { item };
10811087
const start = getEvent("onStart");
10821088
start(evt);
@@ -1099,7 +1105,7 @@ describe("draggable.vue when initialized with a transition group", () => {
10991105

11001106
describe("when remove is called", () => {
11011107
beforeEach(() => {
1102-
element.children[0].removeChild(item);
1108+
element.removeChild(item);
11031109
const remove = getEvent("onRemove");
11041110
remove({
11051111
item,
@@ -1134,7 +1140,6 @@ describe("draggable.vue when initialized with a transition group", () => {
11341140
describe("when update is called", () => {
11351141
beforeEach(() => {
11361142
const transitionRoot = element;
1137-
//.children[0];
11381143
const firstDraggable = transitionRoot.children[0];
11391144
transitionRoot.removeChild(item);
11401145
transitionRoot.insertBefore(item, firstDraggable);
@@ -1164,7 +1169,7 @@ describe("draggable.vue when initialized with a transition group", () => {
11641169
item,
11651170
oldIndex: 1,
11661171
newIndex: 0,
1167-
from: element.children[0]
1172+
from: element
11681173
};
11691174
expect(wrapper.emitted().update).toEqual([[expectedEvt]]);
11701175
});
@@ -1187,8 +1192,8 @@ describe("draggable.vue when initialized with a transition group", () => {
11871192
move = jest.fn();
11881193
wrapper.setProps({ move });
11891194
evt = {
1190-
to: element.children[0],
1191-
related: element.children[0].children[1],
1195+
to: element,
1196+
related: element.children[1],
11921197
willInsertAfter: false
11931198
};
11941199
originalEvt = {
@@ -1210,8 +1215,8 @@ describe("draggable.vue when initialized with a transition group", () => {
12101215
index: 1,
12111216
list: ["a", "b", "c"]
12121217
},
1213-
to: element.children[0],
1214-
related: element.children[0].children[1],
1218+
to: element,
1219+
related: element.children[1],
12151220
willInsertAfter: false
12161221
};
12171222
doMove();

0 commit comments

Comments
 (0)