1+ import { DOMWrapper , mount , VueWrapper } from "@vue/test-utils" ;
2+ import EmptyApp from "../components/EmptyApp.vue" ;
3+ import { defineComponent , h } from "vue" ;
4+ import { InputField , Form , FormField } from "../../../src/index" ;
5+ import STORE from "./../../../src/config/store" ;
6+
7+ const name = 'phone'
8+ const label = 'Your phone'
9+ function defineTelComponent ( ) {
10+ return defineComponent ( {
11+ template : `<div><form-field type = "tel" name = "${ name } " required label = "${ label } " /></div>` ,
12+ components : { FormField}
13+ } )
14+ }
15+ function defaultMount ( component = defineTelComponent ( ) ) {
16+ return mount ( EmptyApp , {
17+ slots : { default : component } ,
18+ attachTo : document . body
19+ } )
20+ }
21+
22+ describe ( "Input tel" , ( ) => {
23+ let app : VueWrapper < any > ;
24+ let form : Form
25+ let input : DOMWrapper < HTMLInputElement >
26+ beforeEach ( ( ) => {
27+ app = defaultMount ( )
28+ form = ( app . vm as any ) . form
29+ input = app . find ( 'input' )
30+ } )
31+
32+ test ( "По умолчанию поле не должно ничего показывать" , async ( ) => {
33+ expect ( input . element . value ) . toBe ( "" )
34+ } )
35+ test ( "В пустом поле отображается должен отображаться лишь label" , async ( ) => {
36+ expect ( app . text ( ) ) . toBe ( label + '?' )
37+ } )
38+ test ( "Ввод поля изменяет form" , async ( ) => {
39+ await input . setValue ( "+1234" ) ;
40+ expect ( form . getValueByName ( name ) ) . toBe ( "1234" )
41+ } )
42+ test ( "Установка значения в form меняет поле" , async ( ) => {
43+ form . setValues ( { [ name ] : "+000" } )
44+ await app . vm . $nextTick ( ) ;
45+ expect ( input . element . value ) . toBe ( "+000" )
46+ } )
47+ test ( "Поле должно отображать значение с +, даже если в форме хранится без" , async ( ) => {
48+ form . setValues ( { [ name ] : "222" } )
49+ await app . vm . $nextTick ( ) ;
50+ expect ( input . element . value ) . toBe ( "+222" )
51+ } )
52+ test ( "При удалении значения из формы, поле должно стать пустым" , async ( ) => {
53+ form . setValues ( { [ name ] : "222" } )
54+ await app . vm . $nextTick ( ) ;
55+ form . cleanField ( name ) ;
56+ await app . vm . $nextTick ( ) ;
57+ expect ( input . element . value ) . toBe ( "" )
58+ } )
59+ test ( "При очистки поля(вставки ''), в форме должна хранится пустая строка." , async ( ) => {
60+ await input . setValue ( "+1234" ) ;
61+ await input . setValue ( "" ) ;
62+ expect ( form . getValueByName ( name ) ) . toBe ( "" )
63+ } )
64+ test ( "Блокировка поля блокирует input" , async ( ) => {
65+ form . disable ( )
66+ await app . vm . $nextTick ( ) ;
67+ expect ( input . element . disabled ) . toBe ( true ) ;
68+ } )
69+ test ( "Блокировка input должна запрещать ввод" , async ( ) => {
70+ await input . setValue ( "23" ) ;
71+ form . disable ( )
72+ await app . vm . $nextTick ( ) ;
73+ await input . setValue ( "+1234" ) ;
74+ expect ( form . getValueByName ( name ) ) . toBe ( "23" )
75+ } )
76+ test ( "Ошибка валидации должна отображаться" , async ( ) => {
77+ form . validate ( )
78+ await app . vm . $nextTick ( ) ;
79+ expect ( app . text ( ) ) . toBe ( label + '?' + STORE . requiredMessage )
80+ } )
81+ test ( "Иконка страны должна меняться при установки новых значений" , async ( ) => {
82+ await input . setValue ( "4523" ) ;
83+ const icon = app . find ( '.input-tel-code' ) // Иконка появляется только после первой установки
84+
85+ expect ( icon . element . getAttribute ( 'src' ) ?. includes ( 'dk.svg' ) ) . toBe ( true )
86+
87+ await input . setValue ( "35626" ) ;
88+ expect ( icon . element . getAttribute ( 'src' ) ?. includes ( 'mt.svg' ) ) . toBe ( true )
89+
90+ await input . setValue ( "37529" ) ;
91+ expect ( icon . element . getAttribute ( 'src' ) ?. includes ( 'by.svg' ) ) . toBe ( true )
92+
93+
94+
95+ } )
96+
97+ } )
0 commit comments