1+ import { mount , VueWrapper } from "@vue/test-utils" ;
2+ import EmptyApp from "./components/EmptyApp.vue" ;
3+ import { defineComponent } from "vue" ;
4+ import { FormField , Form } from "./../../src/index" ;
5+ import STORE from "../../src/config/store" ;
6+
7+ const name = "color"
8+ function defineSingleRadio ( ) {
9+ return defineComponent ( {
10+ template : `<div><form-field type = "single-radio" name = "${ name } " label = "Select color" required/></div>` ,
11+ components : { FormField}
12+ } )
13+ }
14+ function defaultMount ( component = defineSingleRadio ( ) ) {
15+ return mount ( EmptyApp , {
16+ slots : {
17+ default : component
18+ } ,
19+ attachTo : document . body
20+ } )
21+ }
22+
23+ describe ( "Input single radio" , ( ) => {
24+ let app : VueWrapper < any >
25+ let form : Form
26+ beforeEach ( ( ) => {
27+ app = defaultMount ( ) ;
28+ form = ( app . vm as any ) . form
29+ } )
30+
31+ test ( "Single radio show display the label" , ( ) => {
32+ expect ( app . text ( ) ) . toBe ( "Select color" )
33+ } )
34+ test ( "should change value after click" , async ( ) => {
35+ await app . find ( '.element-input-radio' ) . trigger ( 'click' )
36+ expect ( form . getValueByName ( name ) ) . toBe ( true )
37+
38+ await app . find ( '.element-input-radio' ) . trigger ( 'click' )
39+ expect ( form . getValueByName ( name ) ) . toBe ( false )
40+
41+ await app . find ( '.element-input-radio' ) . trigger ( 'click' )
42+ expect ( form . getValueByName ( name ) ) . toBe ( true )
43+ } )
44+ test ( "Should show error" , async ( ) => {
45+ form . validate ( ) ;
46+ await app . vm . $nextTick ( )
47+ expect ( app . find ( '.element-input-radio_error' ) . exists ( ) ) . toBe ( true ) ;
48+ expect ( app . text ( ) ) . toBe ( "Select color" + STORE . requiredMessage )
49+ } )
50+ test ( "Single radio should not trigger on click when stay in disabled status" , async ( ) => {
51+ form . setValues ( {
52+ [ name ] : true
53+ } )
54+ form . disable ( ) ;
55+ await app . vm . $nextTick ( )
56+ expect ( app . find ( '.element-input-radio_disabled' ) . exists ( ) ) . toBe ( true ) ;
57+
58+ await app . find ( '.element-input-radio' ) . trigger ( 'click' )
59+ expect ( form . getValueByName ( name ) ) . toBe ( true )
60+ } )
61+
62+ test ( "Press space should toggle value" , async ( ) => {
63+
64+ const input = app . find ( '.element-input-radio' ) ;
65+
66+ await input . trigger ( 'keyup.space' )
67+ expect ( form . getValueByName ( name ) ) . toBe ( true )
68+
69+ await input . trigger ( 'keyup.space' )
70+ expect ( form . getValueByName ( name ) ) . toBe ( false )
71+
72+ await input . trigger ( 'keyup.space' )
73+ expect ( form . getValueByName ( name ) ) . toBe ( true )
74+
75+ } )
76+ test ( "Press enter should toggle value" , async ( ) => {
77+ const input = app . find ( '.element-input-radio' ) ;
78+
79+ await input . trigger ( 'keyup.enter' )
80+ expect ( form . getValueByName ( name ) ) . toBe ( true )
81+
82+ await input . trigger ( 'keyup.enter' )
83+ expect ( form . getValueByName ( name ) ) . toBe ( false )
84+
85+ await input . trigger ( 'keyup.enter' )
86+ expect ( form . getValueByName ( name ) ) . toBe ( true )
87+ } )
88+ } )
0 commit comments