@@ -3,17 +3,38 @@ import React from 'react';
3
3
import { useSelector } from 'react-redux' ;
4
4
import { render , fireEvent , cleanup } from '@testing-library/react' ;
5
5
import { screen } from '@testing-library/dom' ;
6
+ import { initIcons } from '@sap-ux/ui-components' ;
7
+
6
8
import { SearchField } from '../../src/webview/ui/components/Header/SearchField' ;
7
9
import { initI18n } from '../../src/webview/i18n' ;
8
10
11
+ import * as actions from '../../src/webview/state/actions' ;
12
+
13
+ const mockState = {
14
+ activeGuidedAnswerNode : [ ] ,
15
+ guidedAnswerTreeSearchResult : {
16
+ trees : [ treeMock ] ,
17
+ resultSize : 1 ,
18
+ productFilters : [ ] ,
19
+ componentFilters : [ ]
20
+ } ,
21
+ query : 'fiori tools' ,
22
+ guideFeedback : true ,
23
+ selectedProductFilters : [ 'ProductFilter1, ProductFilter2' ] ,
24
+ selectedComponentFilters : [ 'ComponentFilter1' , 'ComponentFilter2' ] ,
25
+ activeScreen : 'SEARCH'
26
+ } ;
27
+
9
28
jest . useFakeTimers ( ) ;
10
29
jest . spyOn ( global , 'setTimeout' ) ;
11
30
12
31
jest . mock ( '../../src/webview/state' , ( ) => {
13
32
return {
14
33
actions : {
15
34
searchTree : jest . fn ( ) ,
16
- setQueryValue : jest . fn ( ) ,
35
+ setQueryValue : ( newValue : string ) => {
36
+ mockState . query = newValue ;
37
+ } ,
17
38
parseUrl : jest . fn ( )
18
39
}
19
40
} ;
@@ -24,21 +45,7 @@ jest.mock('react-redux', () => ({
24
45
} ) ) ;
25
46
26
47
describe ( '<SearchField />' , ( ) => {
27
- const mockState = {
28
- activeGuidedAnswerNode : [ ] ,
29
- guidedAnswerTreeSearchResult : {
30
- trees : [ treeMock ] ,
31
- resultSize : 1 ,
32
- productFilters : [ ] ,
33
- componentFilters : [ ]
34
- } ,
35
- query : 'fiori tools' ,
36
- guideFeedback : true ,
37
- selectedProductFilters : [ 'ProductFilter1, ProductFilter2' ] ,
38
- selectedComponentFilters : [ 'ComponentFilter1' , 'ComponentFilter2' ] ,
39
- activeScreen : 'SEARCH'
40
- } ;
41
-
48
+ initIcons ( ) ;
42
49
initI18n ( ) ;
43
50
afterEach ( cleanup ) ;
44
51
@@ -47,17 +54,40 @@ describe('<SearchField />', () => {
47
54
48
55
const { container } = render ( < SearchField /> ) ;
49
56
expect ( container ) . toMatchSnapshot ( ) ;
57
+ } ) ;
58
+
59
+ it ( 'Should render a SearchField component, on home screen' , ( ) => {
60
+ ( useSelector as jest . Mock ) . mockImplementation ( ( selector ) => selector ( { ...mockState , activeScreen : 'HOME' } ) ) ;
61
+
62
+ const { container } = render ( < SearchField /> ) ;
63
+ expect ( container ) . toMatchSnapshot ( ) ;
64
+ } ) ;
65
+
66
+ it ( 'Should render a SearchField component, search value entered' , ( ) => {
67
+ ( useSelector as jest . Mock ) . mockImplementation ( ( selector ) => selector ( mockState ) ) ;
68
+
69
+ const { container } = render ( < SearchField /> ) ;
70
+ expect ( container ) . toMatchSnapshot ( ) ;
50
71
51
72
//Test click event
52
73
const element = screen . getByTestId ( 'search-field' ) ;
53
74
fireEvent . input ( element , { target : { value : 'Fiori Tools' } } ) ;
54
- expect ( setTimeout ) . toHaveBeenCalledTimes ( 2 ) ;
75
+ expect ( setTimeout ) . toHaveBeenCalledTimes ( 1 ) ;
76
+
77
+ expect ( mockState . query ) . toEqual ( 'Fiori Tools' ) ;
55
78
} ) ;
56
79
57
- it ( 'Should render a SearchField component, on home screen ' , ( ) => {
58
- ( useSelector as jest . Mock ) . mockImplementation ( ( selector ) => selector ( { ... mockState , activeScreen : 'HOME' } ) ) ;
80
+ it ( 'Should render a SearchField component, search value entered ' , ( ) => {
81
+ ( useSelector as jest . Mock ) . mockImplementation ( ( selector ) => selector ( mockState ) ) ;
59
82
60
83
const { container } = render ( < SearchField /> ) ;
61
84
expect ( container ) . toMatchSnapshot ( ) ;
85
+
86
+ //Test click event
87
+ const element = screen . getByTestId ( 'search-field' ) ;
88
+ fireEvent . input ( element , { target : { value : '' } } ) ;
89
+ expect ( setTimeout ) . toHaveBeenCalledTimes ( 1 ) ;
90
+
91
+ expect ( mockState . query ) . toEqual ( '' ) ;
62
92
} ) ;
63
93
} ) ;
0 commit comments