@@ -29,93 +29,114 @@ const items: ButtonDropdownProps.Items = [
29
29
onClickSpy = jest . fn ( ) ;
30
30
onFollowSpy = jest . fn ( ) ;
31
31
wrapper = renderButtonDropdown ( { ...props , items, onItemClick : onClickSpy , onItemFollow : onFollowSpy } ) ;
32
- act ( ( ) => wrapper . findNativeButton ( ) . keydown ( KeyCode . enter ) ) ;
33
32
} ) ;
34
33
35
- test ( 'should close the dropdown when escape is pressed' , ( ) => {
36
- expect ( wrapper . findOpenDropdown ( ) ) . not . toBe ( null ) ;
37
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . escape ) ) ;
34
+ test ( 'should open the dropdown and focus first item when pressing down arrow key' , ( ) => {
38
35
expect ( wrapper . findOpenDropdown ( ) ) . toBe ( null ) ;
39
- } ) ;
40
- test ( 'should select the next item if "down" is pressed' , ( ) => {
41
- expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item1' ) ;
42
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
43
- expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item2' ) ;
44
- } ) ;
45
-
46
- test ( 'should select the previous item if "up" is pressed' , ( ) => {
47
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
48
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . up ) ) ;
36
+ act ( ( ) => wrapper . findTriggerButton ( ) ! . keydown ( KeyCode . down ) ) ;
37
+ expect ( wrapper . findOpenDropdown ( ) ) . toBeTruthy ( ) ;
49
38
expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item1' ) ;
50
39
} ) ;
51
40
52
- test ( 'should include disabled items' , ( ) => {
53
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
54
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
55
- expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item3' ) ;
56
- } ) ;
57
-
58
- test ( 'should call onClick on enter' , ( ) => {
59
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . enter ) ) ;
60
- expect ( onClickSpy ) . toHaveBeenCalledTimes ( 1 ) ;
61
- } ) ;
62
-
63
- test ( 'should not call onClick on enter a disabled item' , ( ) => {
64
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
65
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
66
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . enter ) ) ;
67
- expect ( onClickSpy ) . not . toHaveBeenCalled ( ) ;
68
- } ) ;
69
-
70
- test ( 'should call onClick on space' , ( ) => {
71
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . space ) ) ;
72
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keyup ( KeyCode . space ) ) ;
73
- expect ( onClickSpy ) . toHaveBeenCalledTimes ( 1 ) ;
41
+ test ( 'should open the dropdown and focus last item when pressing up arrow key' , ( ) => {
42
+ expect ( wrapper . findOpenDropdown ( ) ) . toBe ( null ) ;
43
+ act ( ( ) => wrapper . findTriggerButton ( ) ! . keydown ( KeyCode . up ) ) ;
44
+ expect ( wrapper . findOpenDropdown ( ) ) . toBeTruthy ( ) ;
45
+ expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item5' ) ;
74
46
} ) ;
75
47
76
- test ( 'should not call onClick on space a disabled item' , ( ) => {
77
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
78
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
79
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . space ) ) ;
80
- expect ( onClickSpy ) . not . toHaveBeenCalled ( ) ;
81
- } ) ;
48
+ describe ( 'when dropdown is open' , ( ) => {
49
+ beforeEach ( ( ) => {
50
+ act ( ( ) => wrapper . findNativeButton ( ) . keydown ( KeyCode . enter ) ) ;
51
+ } ) ;
52
+
53
+ test ( 'should close the dropdown when escape is pressed' , ( ) => {
54
+ expect ( wrapper . findOpenDropdown ( ) ) . not . toBe ( null ) ;
55
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . escape ) ) ;
56
+ expect ( wrapper . findOpenDropdown ( ) ) . toBe ( null ) ;
57
+ } ) ;
58
+ test ( 'should select the next item if "down" is pressed' , ( ) => {
59
+ expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item1' ) ;
60
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
61
+ expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item2' ) ;
62
+ } ) ;
82
63
83
- test ( 'should call onFollow on space if item has href' , ( ) => {
84
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
85
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . space ) ) ;
86
- act ( ( ) => wrapper . findOpenDropdown ( ) ! . keyup ( KeyCode . space ) ) ;
87
- expect ( onFollowSpy ) . toHaveBeenCalledTimes ( 1 ) ;
88
- } ) ;
64
+ test ( 'should select the previous item if "up" is pressed' , ( ) => {
65
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
66
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . up ) ) ;
67
+ expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item1' ) ;
68
+ } ) ;
89
69
90
- test . each ( [ KeyCode . enter , KeyCode . space ] ) (
91
- 'should fire event correctly when items with checkbox pressed using key=%s' ,
92
- keyCode => {
70
+ test ( 'should include disabled items' , ( ) => {
93
71
act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
94
72
act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
73
+ expect ( wrapper . findHighlightedItem ( ) ! . getElement ( ) ) . toHaveTextContent ( 'item3' ) ;
74
+ } ) ;
75
+
76
+ test ( 'should call onClick on enter' , ( ) => {
77
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . enter ) ) ;
78
+ expect ( onClickSpy ) . toHaveBeenCalledTimes ( 1 ) ;
79
+ } ) ;
80
+
81
+ test ( 'should not call onClick on enter a disabled item' , ( ) => {
95
82
act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
96
83
act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
84
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . enter ) ) ;
85
+ expect ( onClickSpy ) . not . toHaveBeenCalled ( ) ;
86
+ } ) ;
97
87
98
- // Fire keydown on the 5th element, checkbox should be false after click
99
- act ( ( ) => wrapper . findItems ( ) [ 4 ] ! . keydown ( keyCode ) ) ;
100
- // Space handling is triggered on keyup
101
- if ( keyCode === KeyCode . space ) {
102
- act ( ( ) => wrapper . findItems ( ) [ 4 ] ! . keyup ( keyCode ) ) ;
103
- }
88
+ test ( 'should call onClick on space' , ( ) => {
89
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . space ) ) ;
90
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keyup ( KeyCode . space ) ) ;
104
91
expect ( onClickSpy ) . toHaveBeenCalledTimes ( 1 ) ;
105
- expect ( onClickSpy ) . toHaveBeenCalledWith ( expect . objectContaining ( { detail : { id : 'i5' , checked : false } } ) ) ;
92
+ } ) ;
106
93
107
- // Open button dropdown again
108
- act ( ( ) => wrapper . findNativeButton ( ) . keydown ( KeyCode . enter ) ) ;
94
+ test ( 'should not call onClick on space a disabled item' , ( ) => {
95
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
96
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
97
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . space ) ) ;
98
+ expect ( onClickSpy ) . not . toHaveBeenCalled ( ) ;
99
+ } ) ;
109
100
110
- // Fire keydown on the 1st element, checked should be undefined
111
- act ( ( ) => wrapper . findItems ( ) [ 0 ] ! . keydown ( keyCode ) ) ;
112
- // Space handling is triggered on keyup
113
- if ( keyCode === KeyCode . space ) {
114
- act ( ( ) => wrapper . findItems ( ) [ 0 ] ! . keyup ( keyCode ) ) ;
101
+ test ( 'should call onFollow on space if item has href' , ( ) => {
102
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
103
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . space ) ) ;
104
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keyup ( KeyCode . space ) ) ;
105
+ expect ( onFollowSpy ) . toHaveBeenCalledTimes ( 1 ) ;
106
+ } ) ;
107
+
108
+ test . each ( [ KeyCode . enter , KeyCode . space ] ) (
109
+ 'should fire event correctly when items with checkbox pressed using key=%s' ,
110
+ keyCode => {
111
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
112
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
113
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
114
+ act ( ( ) => wrapper . findOpenDropdown ( ) ! . keydown ( KeyCode . down ) ) ;
115
+
116
+ // Fire keydown on the 5th element, checkbox should be false after click
117
+ act ( ( ) => wrapper . findItems ( ) [ 4 ] ! . keydown ( keyCode ) ) ;
118
+ // Space handling is triggered on keyup
119
+ if ( keyCode === KeyCode . space ) {
120
+ act ( ( ) => wrapper . findItems ( ) [ 4 ] ! . keyup ( keyCode ) ) ;
121
+ }
122
+ expect ( onClickSpy ) . toHaveBeenCalledTimes ( 1 ) ;
123
+ expect ( onClickSpy ) . toHaveBeenCalledWith ( expect . objectContaining ( { detail : { id : 'i5' , checked : false } } ) ) ;
124
+
125
+ // Open button dropdown again
126
+ act ( ( ) => wrapper . findNativeButton ( ) . keydown ( KeyCode . enter ) ) ;
127
+
128
+ // Fire keydown on the 1st element, checked should be undefined
129
+ act ( ( ) => wrapper . findItems ( ) [ 0 ] ! . keydown ( keyCode ) ) ;
130
+ // Space handling is triggered on keyup
131
+ if ( keyCode === KeyCode . space ) {
132
+ act ( ( ) => wrapper . findItems ( ) [ 0 ] ! . keyup ( keyCode ) ) ;
133
+ }
134
+ expect ( onClickSpy ) . toHaveBeenCalledTimes ( 2 ) ;
135
+ expect ( onClickSpy ) . toHaveBeenCalledWith (
136
+ expect . objectContaining ( { detail : { id : 'i1' , checked : undefined } } )
137
+ ) ;
115
138
}
116
- expect ( onClickSpy ) . toHaveBeenCalledTimes ( 2 ) ;
117
- expect ( onClickSpy ) . toHaveBeenCalledWith ( expect . objectContaining ( { detail : { id : 'i1' , checked : undefined } } ) ) ;
118
- }
119
- ) ;
139
+ ) ;
140
+ } ) ;
120
141
} ) ;
121
142
} ) ;
0 commit comments