1- import jsHelper , { SearchParameters } from 'algoliasearch-helper' ;
1+ import algoliasearchHelper , { SearchParameters } from 'algoliasearch-helper' ;
22import connectVoiceSearch from '../connectVoiceSearch' ;
33
44jest . mock ( '../../../lib/voiceSearchHelper' , ( ) => {
@@ -16,30 +16,18 @@ jest.mock('../../../lib/voiceSearchHelper', () => {
1616 } ;
1717} ) ;
1818
19- function getDefaultSetup ( ) {
20- const renderFn = jest . fn ( ) ;
21- const unmountFn = jest . fn ( ) ;
22- const makeWidget = connectVoiceSearch ( renderFn , unmountFn ) ;
23- const widget = makeWidget ( { } ) ;
24- const helper = jsHelper ( { } ) ;
25-
26- return {
27- renderFn,
28- unmountFn,
29- widget,
30- helper,
31- } ;
32- }
33-
3419function getInitializedWidget ( ) {
35- const { renderFn, unmountFn, widget, helper } = getDefaultSetup ( ) ;
20+ const helper = algoliasearchHelper ( { } , '' ) ;
21+
22+ const renderFn = ( ) => { } ;
23+ const makeWidget = connectVoiceSearch ( renderFn ) ;
24+ const widget = makeWidget ( { } ) ;
3625
3726 helper . search = ( ) => { } ;
3827 widget . init ( { helper } ) ;
3928
4029 return {
4130 renderFn,
42- unmountFn,
4331 widget,
4432 helper,
4533 refine : query => widget . _refine ( query ) ,
@@ -59,72 +47,139 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/voice-searc
5947 } ) ;
6048 } ) ;
6149
62- describe ( 'lifecycle' , ( ) => {
63- it ( 'calls renderFn during init and render' , ( ) => {
64- const { renderFn, widget, helper } = getDefaultSetup ( ) ;
65- widget . init ( { helper } ) ;
66- expect ( renderFn ) . toHaveBeenCalledTimes ( 1 ) ;
67- expect ( renderFn ) . toHaveBeenLastCalledWith (
68- expect . objectContaining ( { } ) ,
69- true
70- ) ;
71- widget . render ( {
72- helper,
73- } ) ;
74- expect ( renderFn ) . toHaveBeenCalledTimes ( 2 ) ;
75- expect ( renderFn ) . toHaveBeenLastCalledWith (
76- expect . objectContaining ( { } ) ,
77- false
78- ) ;
79- } ) ;
50+ it ( 'calls renderFn during init and render' , ( ) => {
51+ const helper = algoliasearchHelper ( { } , '' ) ;
8052
81- it ( 'calls unmount on `dispose`' , ( ) => {
82- const { unmountFn, widget, helper } = getDefaultSetup ( ) ;
83- widget . init ( { helper } ) ;
84- widget . dispose ( { helper, state : helper . state } ) ;
85- expect ( unmountFn ) . toHaveBeenCalledTimes ( 1 ) ;
86- } ) ;
53+ const renderFn = jest . fn ( ) ;
54+ const makeWidget = connectVoiceSearch ( renderFn ) ;
55+ const widget = makeWidget ( { } ) ;
8756
88- it ( 'removes event listeners on `dispose`' , ( ) => {
89- const { widget, helper } = getDefaultSetup ( ) ;
90- widget . init ( { helper } ) ;
91- widget . dispose ( { helper, state : helper . state } ) ;
92- expect ( widget . _voiceSearchHelper . dispose ) . toHaveBeenCalledTimes ( 1 ) ;
93- } ) ;
57+ widget . init ( { helper } ) ;
9458
95- it ( 'does not throw without the unmount function' , ( ) => {
96- const renderFn = ( ) => { } ;
97- const makeWidget = connectVoiceSearch ( renderFn ) ;
98- const widget = makeWidget ( { } ) ;
99- const helper = jsHelper ( { } ) ;
100- widget . init ( { helper } ) ;
101- expect ( ( ) =>
102- widget . dispose ( { helper, state : helper . state } )
103- ) . not . toThrow ( ) ;
59+ expect ( renderFn ) . toHaveBeenCalledTimes ( 1 ) ;
60+ expect ( renderFn ) . toHaveBeenLastCalledWith (
61+ expect . objectContaining ( { } ) ,
62+ true
63+ ) ;
64+
65+ widget . render ( {
66+ helper,
10467 } ) ;
68+
69+ expect ( renderFn ) . toHaveBeenCalledTimes ( 2 ) ;
70+ expect ( renderFn ) . toHaveBeenLastCalledWith (
71+ expect . objectContaining ( { } ) ,
72+ false
73+ ) ;
10574 } ) ;
10675
10776 it ( 'triggers render when state changes' , ( ) => {
108- const { renderFn, widget, helper } = getDefaultSetup ( ) ;
77+ const helper = algoliasearchHelper ( { } , '' ) ;
78+
79+ const renderFn = jest . fn ( ) ;
80+ const makeWidget = connectVoiceSearch ( renderFn ) ;
81+ const widget = makeWidget ( { } ) ;
82+
10983 widget . init ( { helper } ) ;
84+
11085 expect ( renderFn ) . toHaveBeenCalledTimes ( 1 ) ;
86+
11187 widget . _voiceSearchHelper . changeState ( ) ;
88+
11289 expect ( renderFn ) . toHaveBeenCalledTimes ( 2 ) ;
90+
11391 widget . _voiceSearchHelper . changeState ( ) ;
92+
11493 expect ( renderFn ) . toHaveBeenCalledTimes ( 3 ) ;
11594 } ) ;
11695
11796 it ( 'setQuery and search when query changes' , ( ) => {
118- const { widget, helper } = getDefaultSetup ( ) ;
97+ const helper = algoliasearchHelper ( { } , '' ) ;
98+
99+ const renderFn = jest . fn ( ) ;
100+ const makeWidget = connectVoiceSearch ( renderFn ) ;
101+ const widget = makeWidget ( { } ) ;
102+
119103 jest . spyOn ( helper , 'setQuery' ) ;
104+
120105 helper . search = jest . fn ( ) ;
106+
121107 widget . init ( { helper } ) ;
108+
122109 widget . _voiceSearchHelper . changeQuery ( 'foo' ) ;
110+
123111 expect ( helper . setQuery ) . toHaveBeenCalledTimes ( 1 ) ;
124112 expect ( helper . setQuery ) . toHaveBeenCalledWith ( 'foo' ) ;
125113 expect ( helper . search ) . toHaveBeenCalledTimes ( 1 ) ;
126114 } ) ;
127115
116+ describe ( 'dispose' , ( ) => {
117+ it ( 'calls the unmount function' , ( ) => {
118+ const helper = algoliasearchHelper ( { } , '' ) ;
119+
120+ const renderFn = ( ) => { } ;
121+ const unmountFn = jest . fn ( ) ;
122+ const makeWidget = connectVoiceSearch ( renderFn , unmountFn ) ;
123+ const widget = makeWidget ( { } ) ;
124+
125+ widget . init ( { helper } ) ;
126+
127+ expect ( unmountFn ) . toHaveBeenCalledTimes ( 0 ) ;
128+
129+ widget . dispose ( { helper, state : helper . state } ) ;
130+
131+ expect ( unmountFn ) . toHaveBeenCalledTimes ( 1 ) ;
132+ } ) ;
133+
134+ it ( 'does not throw without the unmount function' , ( ) => {
135+ const helper = algoliasearchHelper ( { } , '' ) ;
136+
137+ const renderFn = ( ) => { } ;
138+ const makeWidget = connectVoiceSearch ( renderFn ) ;
139+ const widget = makeWidget ( { } ) ;
140+
141+ widget . init ( { helper } ) ;
142+
143+ expect ( ( ) =>
144+ widget . dispose ( { helper, state : helper . state } )
145+ ) . not . toThrow ( ) ;
146+ } ) ;
147+
148+ it ( 'removes event listeners on the voice helper' , ( ) => {
149+ const helper = algoliasearchHelper ( { } , '' ) ;
150+
151+ const renderFn = ( ) => { } ;
152+ const makeWidget = connectVoiceSearch ( renderFn ) ;
153+ const widget = makeWidget ( { } ) ;
154+
155+ widget . init ( { helper } ) ;
156+
157+ expect ( widget . _voiceSearchHelper . dispose ) . toHaveBeenCalledTimes ( 0 ) ;
158+
159+ widget . dispose ( { helper, state : helper . state } ) ;
160+
161+ expect ( widget . _voiceSearchHelper . dispose ) . toHaveBeenCalledTimes ( 1 ) ;
162+ } ) ;
163+
164+ it ( 'removes the `query` from the `SearchParameters`' , ( ) => {
165+ const helper = algoliasearchHelper ( { } , '' , {
166+ query : 'Apple' ,
167+ } ) ;
168+
169+ const renderFn = ( ) => { } ;
170+ const makeWidget = connectVoiceSearch ( renderFn ) ;
171+ const widget = makeWidget ( { } ) ;
172+
173+ widget . init ( { helper } ) ;
174+
175+ expect ( helper . state . query ) . toBe ( 'Apple' ) ;
176+
177+ const nextState = widget . dispose ( { helper, state : helper . state } ) ;
178+
179+ expect ( nextState . query ) . toBeUndefined ( ) ;
180+ } ) ;
181+ } ) ;
182+
128183 describe ( 'getWidgetState' , ( ) => {
129184 it ( 'returns the same state if query is an empty string' , ( ) => {
130185 const { widget, helper, refine } = getInitializedWidget ( ) ;
0 commit comments