Skip to content

Commit dcfde9f

Browse files
authored
Merge pull request #46 from lionel-bijaoui/LB_vueMultiSelect_unit_test
VueMultiSelect unit test
2 parents 4ab7a8e + 09a41f0 commit dcfde9f

File tree

5 files changed

+138
-11
lines changed

5 files changed

+138
-11
lines changed

dev/schema.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,9 @@ module.exports = {
222222
numeralDecimalScale: 2,
223223
numeralDecimalMark: '.',
224224
// General
225-
blocks: [0, 2, 3, 4],
225+
blocks: [0, 2, 0, 3, 4],
226226
delimiter: ' ',
227-
delimiters: ['(', ') ', '-', '-'],
227+
delimiters: ['(', ')', ' ', '-', '-'],
228228
// prefix: '(',
229229
numericOnly: true,
230230
uppercase: false,
@@ -406,6 +406,16 @@ module.exports = {
406406
// direction: "ltr", //"ltr", "rtl"
407407
// tooltips: false, // false, true, formatter, array[formatter or false]
408408
// animate: true,
409+
range:{
410+
'min': [ 0 ],
411+
'max': [ 10 ]
412+
},
413+
pips: {
414+
mode: 'count',
415+
values: 6,
416+
density: 10,
417+
stepped: true
418+
}
409419
},
410420
// validator: validators.integer
411421
},

src/fields/fieldNoUiSlider.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template lang="jade">
2-
div.slider
2+
div.slider(:disabled="disabled")
33
</template>
44

55
<script>

src/fields/fieldVueMultiSelect.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
:custom-label="schema.selectOptions.customLabel || null",
1818
:taggable="schema.selectOptions.taggable",
1919
:tag-placeholder="schema.selectOptions.tagPlaceholder",
20-
:max="schema.max",
20+
:max="schema.max || null",
2121
@update="updateSelected",
2222
@tag="addTag",
2323
@select="onSelect",
@@ -33,7 +33,7 @@
3333
:limit="schema.selectOptions.limit",
3434
:limit-text="schema.selectOptions.limitText",
3535
:loading="schema.selectOptions.loading",
36-
:disabled="schema.disabled",
36+
:disabled="disabled",
3737
)
3838
</template>
3939
<script>

test/unit/specs/fields/fieldNoUiSlider.spec.js

+65-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,71 @@ describe("fieldNoUiSlider.vue", () => {
3636
expect(field.$el).to.be.exist;
3737

3838
expect(input).to.be.defined;
39-
expect(input.classList.contains("slider")).to.be.true;
39+
expect(input.classList.contains("slider")).to.be.true;
40+
expect(input.disabled).to.be.undefined;
41+
});
42+
43+
before( () => {
44+
vm.$appendTo(document.body);
45+
});
46+
47+
it("should contain an handle element", (done) => {
48+
if (window.noUiSlider) {
49+
vm.$nextTick( () => {
50+
let handle = input.querySelector(".noUi-handle");
51+
expect(handle).to.be.defined;
52+
// expect(input.classList.contains("noui-target")).to.be.true;
53+
done();
54+
});
55+
} else {
56+
// eslint-disable-next-line
57+
throw new Exception("Library is not loaded");
58+
}
59+
});
60+
61+
it.skip("should contain the value", (done) => {
62+
vm.$nextTick( () => {
63+
let origin = input.querySelector(".noUi-origin");
64+
expect(origin.style.left).to.be.within("70%", "90%");
65+
done();
66+
});
67+
});
68+
69+
before( () => {
70+
vm.model = { rating: 10 };
71+
});
72+
73+
it("handle value should be the model value after changed", (done) => {
74+
vm.$nextTick( () => {
75+
let origin = input.querySelector(".noUi-origin");
76+
expect(origin.style.left).to.be.equal("100%");
77+
done();
78+
});
79+
});
80+
81+
// before( (done) => {
82+
// input.querySelectorAll(".noUi-origin")[0].style.left = "0%";
83+
// vm.$nextTick( () => {
84+
// done();
85+
// });
86+
// });
87+
88+
it.skip("model value should be the handle value after changed", (done) => {
89+
vm.$nextTick( () => {
90+
expect(vm.model.rating).to.be.equal("0");
91+
done();
92+
});
93+
});
94+
95+
it.skip("should set disabled", (done) => {
96+
console.log(field.disabled);
97+
console.log(input);
98+
vm.schema.disabled = true;
99+
vm.$nextTick( () => {
100+
console.log(input);
101+
expect(input.disabled).to.be.true;
102+
done();
103+
});
40104
});
41105
});
42106
});

test/unit/specs/fields/fieldVueMultiSelect.spec.js

+58-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { expect } from "chai";
2-
import { createVueField } from "../util";
2+
import { createVueField, trigger } from "../util";
33

44
import Vue from "vue";
55
import fieldVueMultiSelect from "src/fields/fieldVueMultiSelect.vue";
@@ -20,7 +20,7 @@ describe("fieldVueMultiSelect.vue", () => {
2020
type: "vueMultiSelect",
2121
label: "Cities",
2222
model: "city",
23-
multiSelect: false,
23+
multiSelect: true,
2424
required: false,
2525
values: [
2626
"London",
@@ -35,16 +35,69 @@ describe("fieldVueMultiSelect.vue", () => {
3535

3636
before( () => {
3737
createField(schema, model, false);
38-
input = el.getElementsByTagName("select")[0];
38+
vm.$appendTo(document.body);
39+
input = el.querySelector(".multiselect");
3940
});
4041

4142
it("should contain a select element", () => {
4243
expect(field).to.be.exist;
4344
expect(field.$el).to.be.exist;
4445

4546
expect(input).to.be.defined;
46-
// expect(input.classList.contains("form-control")).to.be.false;
47-
// expect(input.disabled).to.be.false;
47+
expect(input.classList.contains("form-control")).to.be.false;
48+
expect(input.classList.contains("multiselect--disabled")).to.be.false;
49+
});
50+
51+
it("should contain option elements", () => {
52+
let options = input.querySelectorAll("li.multiselect__option");
53+
expect(options.length).to.be.equal(schema.values.length);
54+
expect(options[1].querySelector("span").textContent).to.be.equal("Paris");
55+
expect(options[1].classList.contains("multiselect__option--selected")).to.be.true;
56+
});
57+
58+
it("should set disabled", (done) => {
59+
field.disabled = true;
60+
vm.$nextTick( () => {
61+
expect(input.classList.contains("multiselect--disabled")).to.be.true;
62+
field.disabled = false;
63+
done();
64+
});
65+
});
66+
67+
it("input value should be the model value after changed", (done) => {
68+
model.city = "Rome";
69+
vm.$nextTick( () => {
70+
expect(input.querySelectorAll("li.multiselect__option--selected").length).to.be.equal(1);
71+
let options = input.querySelectorAll("li.multiselect__option");
72+
expect(options[2].querySelector("span").textContent).to.be.equal("Rome");
73+
expect(options[2].classList.contains("multiselect__option--selected")).to.be.true;
74+
done();
75+
});
76+
});
77+
78+
it("input value should be the model value after changed (multiselection)", (done) => {
79+
model.city = ["Paris","Rome"];
80+
vm.$nextTick( () => {
81+
expect(input.querySelectorAll("li.multiselect__option--selected").length).to.be.equal(2);
82+
let options = input.querySelectorAll("li.multiselect__option");
83+
expect(options[1].querySelector("span").textContent).to.be.equal("Paris");
84+
expect(options[1].classList.contains("multiselect__option--selected")).to.be.true;
85+
expect(options[2].querySelector("span").textContent).to.be.equal("Rome");
86+
expect(options[2].classList.contains("multiselect__option--selected")).to.be.true;
87+
done();
88+
});
89+
});
90+
91+
it("model value should be the input value if changed", (done) => {
92+
let options = input.querySelectorAll("li.multiselect__option");
93+
trigger(options[2], "mousedown");
94+
95+
vm.$nextTick( () => {
96+
expect(model.city.length).to.be.equal(1);
97+
expect(model.city[0]).to.be.equal("Paris");
98+
done();
99+
});
100+
48101
});
49102
});
50103
});

0 commit comments

Comments
 (0)