Query.spec.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { render, EventSourceMock, WithRoute } from 'lib/testHelpers';
  2. import React from 'react';
  3. import Query, {
  4. getFormattedErrorFromTableData,
  5. } from 'components/KsqlDb/Query/Query';
  6. import { screen } from '@testing-library/dom';
  7. import fetchMock from 'fetch-mock';
  8. import { clusterKsqlDbQueryPath } from 'lib/paths';
  9. import userEvent from '@testing-library/user-event';
  10. const clusterName = 'testLocal';
  11. const renderComponent = () =>
  12. render(
  13. <WithRoute path={clusterKsqlDbQueryPath()}>
  14. <Query />
  15. </WithRoute>,
  16. {
  17. initialEntries: [clusterKsqlDbQueryPath(clusterName)],
  18. }
  19. );
  20. describe('Query', () => {
  21. it('renders', () => {
  22. renderComponent();
  23. expect(screen.getByLabelText('KSQL')).toBeInTheDocument();
  24. expect(screen.getByLabelText('Stream properties:')).toBeInTheDocument();
  25. });
  26. afterEach(() => fetchMock.reset());
  27. it('fetch on execute', async () => {
  28. renderComponent();
  29. const mock = fetchMock.postOnce(`/api/clusters/${clusterName}/ksql/v2`, {
  30. pipeId: 'testPipeID',
  31. });
  32. Object.defineProperty(window, 'EventSource', {
  33. value: EventSourceMock,
  34. });
  35. const inputs = screen.getAllByRole('textbox');
  36. const textAreaElement = inputs[0] as HTMLTextAreaElement;
  37. textAreaElement.focus();
  38. await userEvent.paste('show tables;');
  39. await userEvent.click(screen.getByRole('button', { name: 'Execute' }));
  40. expect(mock.calls().length).toBe(1);
  41. });
  42. it('fetch on execute with streamParams', async () => {
  43. renderComponent();
  44. const mock = fetchMock.postOnce(`/api/clusters/${clusterName}/ksql/v2`, {
  45. pipeId: 'testPipeID',
  46. });
  47. Object.defineProperty(window, 'EventSource', {
  48. value: EventSourceMock,
  49. });
  50. const inputs = screen.getAllByRole('textbox');
  51. const textAreaElement = inputs[0] as HTMLTextAreaElement;
  52. textAreaElement.focus();
  53. await userEvent.paste('show tables;');
  54. const key = screen.getByLabelText('key');
  55. key.focus();
  56. await userEvent.paste('key');
  57. const value = screen.getByLabelText('value');
  58. value.focus();
  59. await userEvent.paste('value');
  60. await userEvent.click(screen.getByRole('button', { name: 'Execute' }));
  61. expect(mock.calls().length).toBe(1);
  62. });
  63. });
  64. describe('getFormattedErrorFromTableData', () => {
  65. it('works', () => {
  66. expect(getFormattedErrorFromTableData([['Test Error']])).toStrictEqual({
  67. title: 'Test Error',
  68. message: '',
  69. });
  70. expect(
  71. getFormattedErrorFromTableData([
  72. ['some_type', 'errorCode', 'messageText'],
  73. ])
  74. ).toStrictEqual({
  75. title: '[Error #errorCode] some_type',
  76. message: 'messageText',
  77. });
  78. expect(
  79. getFormattedErrorFromTableData([
  80. [
  81. 'some_type',
  82. 'errorCode',
  83. 'messageText',
  84. 'statementText',
  85. ['test1', 'test2'],
  86. ],
  87. ])
  88. ).toStrictEqual({
  89. title: '[Error #errorCode] some_type',
  90. message: '[test1, test2] "statementText" messageText',
  91. });
  92. expect(getFormattedErrorFromTableData([])).toStrictEqual({
  93. title: 'Unknown error',
  94. message: 'Recieved empty response',
  95. });
  96. });
  97. });