@@ -116,8 +116,53 @@ describe('NewDiagramForm', function () {
116116 ) ;
117117 } ) ;
118118
119- // TODO
120- it . skip ( 'shows error if it fails to connect' ) ;
119+ it ( 'shows error if it fails to connect' , async function ( ) {
120+ const { store } = renderWithStore ( < NewDiagramForm /> , {
121+ services : {
122+ connections : {
123+ connect ( ) {
124+ throw new Error ( 'Can not connect' ) ;
125+ } ,
126+ getConnectionById ( id ) {
127+ return {
128+ info : { id } ,
129+ } ;
130+ } ,
131+ } as any ,
132+ } ,
133+ } ) ;
134+
135+ {
136+ // Navigate to connections step
137+ store . dispatch ( createNewDiagram ( ) ) ;
138+ store . dispatch ( changeName ( 'diagram1' ) ) ;
139+ userEvent . click (
140+ screen . getByRole ( 'button' , {
141+ name : / n e x t / i,
142+ } )
143+ ) ;
144+ }
145+
146+ userEvent . click ( screen . getByTestId ( 'new-diagram-connection-selector' ) ) ;
147+ userEvent . click ( screen . getByText ( 'Conn2' ) ) ;
148+ userEvent . click (
149+ screen . getByRole ( 'button' , {
150+ name : / n e x t / i,
151+ } )
152+ ) ;
153+
154+ await waitFor ( ( ) => {
155+ expect ( store . getState ( ) . generateDiagramWizard . step ) . to . equal (
156+ 'SELECT_CONNECTION'
157+ ) ;
158+ } ) ;
159+
160+ expect ( store . getState ( ) . generateDiagramWizard . error ?. message ) . to . equal (
161+ 'Can not connect'
162+ ) ;
163+ const alert = screen . getByRole ( 'alert' ) ;
164+ expect ( alert . textContent ) . to . contain ( 'Can not connect' ) ;
165+ } ) ;
121166 } ) ;
122167
123168 context ( 'select-database step' , function ( ) {
@@ -179,8 +224,61 @@ describe('NewDiagramForm', function () {
179224 'SELECT_COLLECTIONS'
180225 ) ;
181226 } ) ;
182- // TODO
183- it . skip ( 'shows error if it fails to fetch list of databases' ) ;
227+
228+ it ( 'shows error if it fails to fetch list of databases' , async function ( ) {
229+ const { store } = renderWithStore ( < NewDiagramForm /> , {
230+ services : {
231+ connections : {
232+ connect ( ) {
233+ return Promise . resolve ( ) ;
234+ } ,
235+ getConnectionById ( id ) {
236+ return {
237+ info : { id } ,
238+ } ;
239+ } ,
240+ getDataServiceForConnection ( ) {
241+ return {
242+ listDatabases ( ) {
243+ throw new Error ( 'Can not list databases' ) ;
244+ } ,
245+ } ;
246+ } ,
247+ } as any ,
248+ } ,
249+ } ) ;
250+
251+ {
252+ // Navigate to connections step
253+ store . dispatch ( createNewDiagram ( ) ) ;
254+ store . dispatch ( changeName ( 'diagram1' ) ) ;
255+ userEvent . click (
256+ screen . getByRole ( 'button' , {
257+ name : / n e x t / i,
258+ } )
259+ ) ;
260+ }
261+
262+ userEvent . click ( screen . getByTestId ( 'new-diagram-connection-selector' ) ) ;
263+ userEvent . click ( screen . getByText ( 'Conn2' ) ) ;
264+ userEvent . click (
265+ screen . getByRole ( 'button' , {
266+ name : / n e x t / i,
267+ } )
268+ ) ;
269+
270+ await waitFor ( ( ) => {
271+ expect ( store . getState ( ) . generateDiagramWizard . step ) . to . equal (
272+ 'SELECT_CONNECTION'
273+ ) ;
274+ } ) ;
275+
276+ expect ( store . getState ( ) . generateDiagramWizard . error ?. message ) . to . equal (
277+ 'Can not list databases'
278+ ) ;
279+ const alert = screen . getByRole ( 'alert' ) ;
280+ expect ( alert . textContent ) . to . contain ( 'Can not list databases' ) ;
281+ } ) ;
184282 } ) ;
185283
186284 context ( 'select-collections step' , function ( ) {
@@ -251,7 +349,87 @@ describe('NewDiagramForm', function () {
251349 expect ( store . getState ( ) . generateDiagramWizard . inProgress ) . to . be . false ;
252350 } ) ;
253351 } ) ;
254- // TODO
255- it . skip ( 'shows error if it fails to fetch list of collections' ) ;
352+
353+ it ( 'shows error if it fails to fetch list of collections' , async function ( ) {
354+ const { store } = renderWithStore ( < NewDiagramForm /> , {
355+ services : {
356+ connections : {
357+ connect ( ) {
358+ return Promise . resolve ( ) ;
359+ } ,
360+ getConnectionById ( id ) {
361+ return {
362+ info : { id } ,
363+ } ;
364+ } ,
365+ getDataServiceForConnection ( ) {
366+ return {
367+ listDatabases ( ) {
368+ return [
369+ {
370+ _id : 'sample_airbnb' ,
371+ name : 'sample_airbnb' ,
372+ } ,
373+ ] ;
374+ } ,
375+ listCollections ( ) {
376+ throw new Error ( 'Can not list collections' ) ;
377+ } ,
378+ } ;
379+ } ,
380+ } as any ,
381+ } ,
382+ } ) ;
383+
384+ {
385+ // Navigate to connections step
386+ store . dispatch ( createNewDiagram ( ) ) ;
387+ store . dispatch ( changeName ( 'diagram1' ) ) ;
388+ userEvent . click (
389+ screen . getByRole ( 'button' , {
390+ name : / n e x t / i,
391+ } )
392+ ) ;
393+ }
394+
395+ {
396+ // Navigate to databases list
397+ userEvent . click ( screen . getByTestId ( 'new-diagram-connection-selector' ) ) ;
398+ userEvent . click ( screen . getByText ( 'Conn2' ) ) ;
399+ userEvent . click (
400+ screen . getByRole ( 'button' , {
401+ name : / n e x t / i,
402+ } )
403+ ) ;
404+ await waitFor ( ( ) => {
405+ expect ( store . getState ( ) . generateDiagramWizard . step ) . to . equal (
406+ 'SELECT_DATABASE'
407+ ) ;
408+ } ) ;
409+ }
410+
411+ {
412+ // Navigate to collections
413+ userEvent . click ( screen . getByTestId ( 'new-diagram-database-selector' ) ) ;
414+ userEvent . click ( screen . getByText ( 'sample_airbnb' ) ) ;
415+ userEvent . click (
416+ screen . getByRole ( 'button' , {
417+ name : / n e x t / i,
418+ } )
419+ ) ;
420+ // When it fails to load collections, we are back at SELECT_DATABASE
421+ await waitFor ( ( ) => {
422+ expect ( store . getState ( ) . generateDiagramWizard . step ) . to . equal (
423+ 'SELECT_DATABASE'
424+ ) ;
425+ } ) ;
426+ }
427+
428+ expect ( store . getState ( ) . generateDiagramWizard . error ?. message ) . to . equal (
429+ 'Can not list collections'
430+ ) ;
431+ const alert = screen . getByRole ( 'alert' ) ;
432+ expect ( alert . textContent ) . to . contain ( 'Can not list collections' ) ;
433+ } ) ;
256434 } ) ;
257435} ) ;
0 commit comments