import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary'; import EnvironmentPageFilter from 'sentry/components/environmentPageFilter'; import OrganizationStore from 'sentry/stores/organizationStore'; import PageFiltersStore from 'sentry/stores/pageFiltersStore'; import ProjectsStore from 'sentry/stores/projectsStore'; const {organization, router, routerContext} = initializeOrg({ organization: {features: ['global-views']}, project: undefined, projects: [ { id: 2, slug: 'project-2', environments: ['prod', 'staging'], }, ], router: { location: { pathname: '/organizations/org-slug/issues/', query: {}, }, params: {orgId: 'org-slug'}, }, }); describe('EnvironmentPageFilter', function () { beforeEach(() => { OrganizationStore.init(); OrganizationStore.onUpdate(organization, {replace: true}); ProjectsStore.init(); ProjectsStore.loadInitialData(organization.projects); PageFiltersStore.reset(); PageFiltersStore.onInitializeUrlState( { projects: [2], environments: [], datetime: {start: null, end: null, period: '14d', utc: null}, }, new Set() ); }); it('can pick environment', function () { render(, { context: routerContext, organization, }); // Open the environment dropdown expect(screen.getByText('All Envs')).toBeInTheDocument(); userEvent.click(screen.getByText('All Envs')); // Click the first environment's checkbox const envOptions = screen.getAllByTestId('checkbox-fancy'); userEvent.click(envOptions[0]); // Close the dropdown userEvent.click(screen.getAllByText('prod')[0]); // Verify we were redirected expect(router.push).toHaveBeenCalledWith( expect.objectContaining({query: {environment: ['prod']}}) ); }); it('can pin environment', async function () { render(, { context: routerContext, organization, }); // Confirm no filters are pinned expect(PageFiltersStore.getState()).toEqual( expect.objectContaining({ pinnedFilters: new Set(), }) ); // Open the environment dropdown expect(screen.getByText('All Envs')).toBeInTheDocument(); userEvent.click(screen.getByText('All Envs')); // Click the pin button const pinButton = screen.getByRole('button', {name: 'Lock filter'}); userEvent.click(pinButton, undefined, {skipHover: true}); await screen.findByRole('button', {name: 'Lock filter', pressed: true}); // Check if the pin indicator has been added expect(screen.getByLabelText('Filter applied across pages')).toBeInTheDocument(); expect(PageFiltersStore.getState()).toEqual( expect.objectContaining({ pinnedFilters: new Set(['environments']), }) ); }); it('can quick select', async function () { render(, { context: routerContext, organization, }); // Open the environment dropdown expect(screen.getByText('All Envs')).toBeInTheDocument(); userEvent.click(screen.getByText('All Envs')); // Click the first environment directly userEvent.click(screen.getByText('prod')); // Verify we were redirected expect(router.push).toHaveBeenCalledWith( expect.objectContaining({query: {environment: ['prod']}}) ); await screen.findByText('prod'); expect(PageFiltersStore.getState()).toEqual( expect.objectContaining({ isReady: true, selection: { datetime: { end: null, period: '14d', start: null, utc: null, }, environments: ['prod'], projects: [2], }, }) ); }); });