11import { expect } from "chai" ;
2- import { createVueField } from "../util" ;
2+ import { createVueField , trigger } from "../util" ;
33
44import Vue from "vue" ;
55import 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