nameAndDescFields.spec.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import {OrganizationFixture} from 'sentry-fixture/organization';
  2. import {RouterFixture} from 'sentry-fixture/routerFixture';
  3. import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
  4. import {useNavigate} from 'sentry/utils/useNavigate';
  5. import WidgetBuilderNameAndDescription from 'sentry/views/dashboards/widgetBuilder/components/nameAndDescFields';
  6. import {WidgetBuilderProvider} from 'sentry/views/dashboards/widgetBuilder/contexts/widgetBuilderContext';
  7. jest.mock('sentry/utils/useNavigate', () => ({
  8. useNavigate: jest.fn(),
  9. }));
  10. const mockUseNavigate = jest.mocked(useNavigate);
  11. const mockSetError = jest.fn();
  12. describe('WidgetBuilder', () => {
  13. let router!: ReturnType<typeof RouterFixture>;
  14. let organization!: ReturnType<typeof OrganizationFixture>;
  15. beforeEach(function () {
  16. router = RouterFixture({
  17. location: {
  18. pathname: '/organizations/org-slug/dashboard/1/',
  19. query: {project: '-1'},
  20. },
  21. params: {},
  22. });
  23. organization = OrganizationFixture({});
  24. });
  25. it('edits name and description', async function () {
  26. const mockNavigate = jest.fn();
  27. mockUseNavigate.mockReturnValue(mockNavigate);
  28. render(
  29. <WidgetBuilderProvider>
  30. <WidgetBuilderNameAndDescription error={{}} setError={mockSetError} />
  31. </WidgetBuilderProvider>,
  32. {
  33. router,
  34. organization,
  35. }
  36. );
  37. await userEvent.type(await screen.findByPlaceholderText('Name'), 'some name');
  38. expect(mockNavigate).toHaveBeenLastCalledWith(
  39. expect.objectContaining({
  40. ...router.location,
  41. query: expect.objectContaining({title: 'some name'}),
  42. })
  43. );
  44. await userEvent.click(await screen.findByTestId('add-description'));
  45. await userEvent.type(
  46. await screen.findByPlaceholderText('Description'),
  47. 'some description'
  48. );
  49. expect(mockNavigate).toHaveBeenLastCalledWith(
  50. expect.objectContaining({
  51. ...router.location,
  52. query: expect.objectContaining({description: 'some description'}),
  53. })
  54. );
  55. });
  56. it('displays error', async function () {
  57. render(
  58. <WidgetBuilderProvider>
  59. <WidgetBuilderNameAndDescription
  60. error={{title: 'Title is required during creation.'}}
  61. setError={mockSetError}
  62. />
  63. </WidgetBuilderProvider>,
  64. {router, organization}
  65. );
  66. expect(
  67. await screen.findByText('Title is required during creation.')
  68. ).toBeInTheDocument();
  69. });
  70. });