Skip to content

Commit 7adc0bb

Browse files
committed
error tests
1 parent c7f4d0d commit 7adc0bb

File tree

1 file changed

+184
-6
lines changed

1 file changed

+184
-6
lines changed

packages/compass-data-modeling/src/components/new-diagram-form.spec.tsx

Lines changed: 184 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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: /next/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: /next/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: /next/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: /next/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: /next/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: /next/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: /next/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

Comments
 (0)