datePageFilter.spec.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import {initializeOrg} from 'sentry-test/initializeOrg';
  2. import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
  3. import DatePageFilter from 'sentry/components/datePageFilter';
  4. import OrganizationStore from 'sentry/stores/organizationStore';
  5. import PageFiltersStore from 'sentry/stores/pageFiltersStore';
  6. const {organization, router, routerContext} = initializeOrg({
  7. router: {
  8. location: {
  9. query: {},
  10. pathname: '/test',
  11. },
  12. params: {},
  13. },
  14. });
  15. describe('DatePageFilter', function () {
  16. beforeEach(() => {
  17. PageFiltersStore.init();
  18. OrganizationStore.init();
  19. OrganizationStore.onUpdate(organization, {replace: true});
  20. PageFiltersStore.onInitializeUrlState(
  21. {
  22. projects: [],
  23. environments: [],
  24. datetime: {
  25. period: '7d',
  26. start: null,
  27. end: null,
  28. utc: null,
  29. },
  30. },
  31. new Set()
  32. );
  33. });
  34. it('can change period', async function () {
  35. render(<DatePageFilter />, {
  36. context: routerContext,
  37. organization,
  38. });
  39. // Open time period dropdown
  40. expect(screen.getByText('7D')).toBeInTheDocument();
  41. await userEvent.click(screen.getByText('7D'));
  42. // Click 30 day period
  43. await userEvent.click(screen.getByText('Last 30 days'));
  44. // Confirm selection changed visible text and query params
  45. expect(await screen.findByText('30D')).toBeInTheDocument();
  46. expect(router.push).toHaveBeenCalledWith(
  47. expect.objectContaining({query: {statsPeriod: '30d'}})
  48. );
  49. expect(PageFiltersStore.getState()).toEqual({
  50. isReady: true,
  51. shouldPersist: true,
  52. desyncedFilters: new Set(),
  53. pinnedFilters: new Set(),
  54. selection: {
  55. datetime: {
  56. period: '30d',
  57. end: undefined,
  58. start: undefined,
  59. utc: null,
  60. },
  61. environments: [],
  62. projects: [],
  63. },
  64. });
  65. });
  66. it('can pin datetime', async function () {
  67. render(<DatePageFilter />, {
  68. context: routerContext,
  69. organization,
  70. });
  71. // Confirm no filters are pinned
  72. expect(PageFiltersStore.getState()).toEqual(
  73. expect.objectContaining({
  74. pinnedFilters: new Set(),
  75. })
  76. );
  77. // Open time period dropdown
  78. await userEvent.click(screen.getByText('7D'));
  79. // Click the pin button
  80. const pinButton = screen.getByRole('button', {name: 'Lock filter'});
  81. await userEvent.click(pinButton);
  82. await screen.findByRole('button', {name: 'Lock filter', pressed: true});
  83. // Check if the pin indicator has been added
  84. expect(screen.getByLabelText('Filter applied across pages')).toBeInTheDocument();
  85. expect(PageFiltersStore.getState()).toEqual(
  86. expect.objectContaining({
  87. pinnedFilters: new Set(['datetime']),
  88. })
  89. );
  90. });
  91. });