1+ import { defineComponent } from "vue" ;
2+ import { InputField , Form } from "../../src/index" ;
3+ import { mount , VueWrapper } from "@vue/test-utils" ;
4+ import EmptyApp from "./components/EmptyApp.vue" ;
5+ import { FormFieldValidationCallback } from "@/types" ;
6+
7+ function defineNumberComponent ( ) {
8+ return defineComponent ( {
9+ template : '<div><input-field type = "number" name = "age"/></div>' ,
10+ components : { InputField}
11+ } )
12+ }
13+ function defaultMount ( component = defineNumberComponent ( ) ) {
14+ return mount ( EmptyApp , {
15+ slots : {
16+ default : component
17+ } ,
18+ attachTo : document . body
19+ } )
20+ }
21+
22+ describe ( "Input number" , ( ) => {
23+
24+ let wrap : VueWrapper < any > ;
25+ beforeEach ( ( ) => wrap = defaultMount ( ) )
26+
27+ test ( "Should display value from Form" , async ( ) => {
28+ const form = wrap . vm . form as Form ;
29+ form . setValues ( {
30+ age : 25
31+ } )
32+ await wrap . vm . $nextTick ( )
33+ expect ( wrap . find ( "input" ) . element . value ) . toBe ( "25" )
34+ } )
35+ test ( "Should change form value" , async ( ) => {
36+ const form = wrap . vm . form as Form ;
37+ form . setValues ( {
38+ age : 25
39+ } )
40+ await wrap . vm . $nextTick ( )
41+ expect ( wrap . find ( "input" ) . element . value ) . toBe ( "25" ) ;
42+ form . setValues ( {
43+ age : 26
44+ } )
45+ await wrap . vm . $nextTick ( )
46+ expect ( wrap . find ( "input" ) . element . value ) . toBe ( "26" ) ;
47+ form . setValues ( {
48+ age : 27
49+ } )
50+ await wrap . vm . $nextTick ( )
51+ expect ( wrap . find ( "input" ) . element . value ) . toBe ( "27" ) ;
52+ } )
53+ test ( "Step Controller Should be hidden if disabled and input should be disabled" , async ( ) => {
54+ const form = wrap . vm . form as Form ;
55+ form . setValues ( {
56+ age : 25
57+ } )
58+ form . disable ( 'age' )
59+
60+ await wrap . vm . $nextTick ( )
61+ expect ( wrap . find ( "input" ) . element . disabled ) . toBe ( true ) ;
62+ expect ( wrap . find ( '.widget-number-step_disabled' ) . exists ( ) ) . toBe ( false ) ;
63+
64+ } )
65+ test ( "Click on button should change the value(up arrow/down arrow)" , async ( ) => {
66+ const form = wrap . vm . form as Form ;
67+ form . setValues ( {
68+ age : 25
69+ } )
70+
71+ await wrap . vm . $nextTick ( )
72+
73+ const stepUp = wrap . find ( '.step_up' ) ;
74+ const stepDown = wrap . find ( '.step_down' ) ;
75+
76+ await stepUp . trigger ( 'click' ) ;
77+ expect ( form . values ) . toEqual ( { age : 26 } )
78+ await stepUp . trigger ( 'click' ) ;
79+ expect ( form . values ) . toEqual ( { age : 27 } )
80+
81+ await stepDown . trigger ( 'click' ) ;
82+ expect ( form . values ) . toEqual ( { age : 26 } ) ;
83+ await stepDown . trigger ( 'click' ) ;
84+ expect ( form . values ) . toEqual ( { age : 25 } ) ;
85+ } )
86+ test ( "Press up and down should change the value" , async ( ) => {
87+ const form = wrap . vm . form as Form ;
88+ form . setValues ( {
89+ age : 25
90+ } )
91+
92+ await wrap . vm . $nextTick ( )
93+
94+ const input = wrap . find ( "input" ) ;
95+ await input . trigger ( 'keydown.up' ) ;
96+ await input . trigger ( 'keydown.up' ) ;
97+
98+ expect ( form . values ) . toEqual ( { age : 27 } )
99+
100+ await input . trigger ( 'keydown.down' ) ;
101+ expect ( form . values ) . toEqual ( { age : 26 } )
102+ } )
103+ test ( "If Step was provided it should change onStep" , async ( ) => {
104+
105+ wrap = defaultMount ( defineComponent ( {
106+ template : '<div><input-field type = "number" name = "age" step = "10"/></div>' ,
107+ components : { InputField}
108+ } ) )
109+
110+ const form = wrap . vm . form as Form ;
111+ form . setValues ( { age : 100 } ) ;
112+
113+ await wrap . vm . $nextTick ( ) ;
114+
115+ const input = wrap . find ( "input" ) ;
116+ await input . trigger ( 'keydown.down' ) ;
117+ await input . trigger ( 'keydown.down' ) ;
118+ await input . trigger ( 'keydown.down' ) ;
119+
120+ expect ( form . values ) . toEqual ( { age : 70 } )
121+ } )
122+ test ( "If suffix was provided it should be displayed" , async ( ) => {
123+
124+ wrap = defaultMount ( defineComponent ( {
125+ template : '<div><input-field type = "number" name = "age" suffix = "Years"/></div>' ,
126+ components : { InputField}
127+ } ) )
128+
129+ await wrap . vm . $nextTick ( ) ;
130+
131+
132+ expect ( wrap . text ( ) ) . toBe ( "Years" )
133+ } )
134+ test ( "Should show error if validated failed" , async ( ) => {
135+
136+ const test :FormFieldValidationCallback [ ] = [
137+ x => ( x >= 0 && x < 120 ) || 'Wrong age'
138+ ] ;
139+
140+ wrap = defaultMount ( defineComponent ( {
141+ template : `<div><input-field type = "number" name = "age" :validation = "${ test } " /></div>` ,
142+ components : { InputField}
143+ } ) )
144+ const form = wrap . vm . form as Form ;
145+ await wrap . vm . $nextTick ( ) ;
146+
147+ form . setValues ( {
148+ age : - 1
149+ } )
150+
151+ await wrap . vm . $nextTick ( )
152+ expect ( wrap . find ( 'input' ) . element . value ) . toBe ( '-1' )
153+ expect ( form . validate ( ) ) . toBe ( false )
154+ await wrap . vm . $nextTick ( )
155+ expect ( wrap . find ( '.container-input-number_error' ) . exists ( ) ) . toBe ( true ) ;
156+ expect ( wrap . text ( ) ) . toBe ( 'Wrong age' )
157+
158+
159+ form . setValues ( {
160+ age : 2
161+ } )
162+ form . validate ( )
163+ await wrap . vm . $nextTick ( )
164+ expect ( wrap . text ( ) ) . toBe ( '' )
165+ } )
166+
167+ } )
0 commit comments