index.spec.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {initializeOrg} from 'sentry-test/initializeOrg';
  2. import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
  3. import selectEvent from 'sentry-test/selectEvent';
  4. import ProjectsStore from 'sentry/stores/projectsStore';
  5. import ProjectSelectControl from 'getsentry/views/spendAllocations/components/projectSelectControl';
  6. describe('projectSelectControl', () => {
  7. const {projects} = initializeOrg();
  8. beforeEach(() => {
  9. ProjectsStore.loadInitialData(projects);
  10. });
  11. afterEach(() => {
  12. ProjectsStore.reset();
  13. });
  14. it('removes options that are filtered out', async () => {
  15. const {rerender} = render(
  16. <ProjectSelectControl
  17. disabled={false}
  18. filteredIdList={[]}
  19. onChange={jest.fn()}
  20. value=""
  21. />
  22. );
  23. await selectEvent.openMenu(screen.getByText('Select a project to continue'));
  24. expect(screen.getAllByTestId('badge-display-name')).toHaveLength(1);
  25. rerender(
  26. <ProjectSelectControl
  27. disabled={false}
  28. filteredIdList={[projects[0]!.id]}
  29. onChange={jest.fn()}
  30. value=""
  31. />
  32. );
  33. expect(screen.getByText('No options')).toBeInTheDocument();
  34. });
  35. it('calls invokes onChange on select', async () => {
  36. const mockCallback = jest.fn();
  37. render(
  38. <ProjectSelectControl
  39. disabled={false}
  40. filteredIdList={[]}
  41. onChange={mockCallback}
  42. value=""
  43. />
  44. );
  45. await selectEvent.openMenu(screen.getByText('Select a project to continue'));
  46. expect(screen.getAllByTestId('badge-display-name')).toHaveLength(1);
  47. expect(mockCallback.mock.calls).toHaveLength(0);
  48. // Menu is still open from above
  49. await userEvent.click(screen.getByText(projects[0]!.slug));
  50. expect(mockCallback.mock.calls).toHaveLength(1);
  51. });
  52. });