import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import DatePageFilter from 'sentry/components/datePageFilter';
import OrganizationStore from 'sentry/stores/organizationStore';
import PageFiltersStore from 'sentry/stores/pageFiltersStore';
const {organization, router, routerContext} = initializeOrg({
router: {
location: {
query: {},
pathname: '/test',
},
params: {},
},
});
describe('DatePageFilter', function () {
beforeEach(() => {
PageFiltersStore.init();
OrganizationStore.init();
OrganizationStore.onUpdate(organization, {replace: true});
PageFiltersStore.onInitializeUrlState(
{
projects: [],
environments: [],
datetime: {
period: '7d',
start: null,
end: null,
utc: null,
},
},
new Set()
);
});
it('can change period', async function () {
render(, {
context: routerContext,
organization,
});
// Open time period dropdown
expect(screen.getByText('7D')).toBeInTheDocument();
await userEvent.click(screen.getByText('7D'));
// Click 30 day period
await userEvent.click(screen.getByText('Last 30 days'));
// Confirm selection changed visible text and query params
expect(await screen.findByText('30D')).toBeInTheDocument();
expect(router.push).toHaveBeenCalledWith(
expect.objectContaining({query: {statsPeriod: '30d'}})
);
expect(PageFiltersStore.getState()).toEqual({
isReady: true,
shouldPersist: true,
desyncedFilters: new Set(),
pinnedFilters: new Set(),
selection: {
datetime: {
period: '30d',
end: undefined,
start: undefined,
utc: null,
},
environments: [],
projects: [],
},
});
});
it('can pin datetime', async function () {
render(, {
context: routerContext,
organization,
});
// Confirm no filters are pinned
expect(PageFiltersStore.getState()).toEqual(
expect.objectContaining({
pinnedFilters: new Set(),
})
);
// Open time period dropdown
await userEvent.click(screen.getByText('7D'));
// Click the pin button
const pinButton = screen.getByRole('button', {name: 'Lock filter'});
await userEvent.click(pinButton);
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(['datetime']),
})
);
});
});