123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- import {waitFor} from 'sentry-test/reactTestingLibrary';
- import {
- pinFilter,
- updateDateTime,
- updateEnvironments,
- updatePersistence,
- updateProjects,
- } from 'sentry/actionCreators/pageFilters';
- import PageFiltersStore from 'sentry/stores/pageFiltersStore';
- jest.mock('sentry/utils/localStorage', () => ({
- getItem: () => JSON.stringify({projects: [5], environments: ['staging']}),
- setItem: jest.fn(),
- }));
- describe('PageFiltersStore', function () {
- beforeEach(() => {
- PageFiltersStore.init();
- });
- afterEach(function () {
- PageFiltersStore.reset();
- });
- it('getState()', function () {
- expect(PageFiltersStore.getState()).toEqual({
- isReady: false,
- shouldPersist: true,
- desyncedFilters: new Set(),
- pinnedFilters: new Set(),
- selection: {
- projects: [],
- environments: [],
- datetime: {period: '14d', start: null, end: null, utc: null},
- },
- });
- });
- it('returns a stable reference with getState', () => {
- PageFiltersStore.updateProjects([1], []);
- const state = PageFiltersStore.getState();
- expect(Object.is(state, PageFiltersStore.getState())).toBe(true);
- });
- it('updateProjects()', async function () {
- expect(PageFiltersStore.getState().selection.projects).toEqual([]);
- updateProjects([1]);
- await tick();
- expect(PageFiltersStore.getState().selection.projects).toEqual([1]);
- });
- it('does not update if projects has same value', async function () {
- const triggerSpy = jest.spyOn(PageFiltersStore, 'trigger');
- PageFiltersStore.updateProjects([1], []);
- await waitFor(() => PageFiltersStore.getState().selection.projects[0] === 1);
- PageFiltersStore.updateProjects([1], []);
- await tick();
- expect(triggerSpy).toHaveBeenCalledTimes(1);
- });
- it('updateDateTime()', async function () {
- expect(PageFiltersStore.getState().selection.datetime).toEqual({
- period: '14d',
- start: null,
- end: null,
- utc: null,
- });
- updateDateTime({period: '2h', start: null, end: null});
- await tick();
- expect(PageFiltersStore.getState().selection.datetime).toEqual({
- period: '2h',
- start: null,
- end: null,
- utc: null,
- });
- updateDateTime({
- period: null,
- start: '2018-08-08T00:00:00',
- end: '2018-09-08T00:00:00',
- utc: true,
- });
- await tick();
- expect(PageFiltersStore.getState().selection.datetime).toEqual({
- period: null,
- start: '2018-08-08T00:00:00',
- end: '2018-09-08T00:00:00',
- utc: true,
- });
- updateDateTime({
- period: null,
- start: null,
- end: null,
- utc: null,
- });
- await tick();
- expect(PageFiltersStore.getState().selection.datetime).toEqual({
- period: null,
- start: null,
- end: null,
- utc: null,
- });
- });
- it('does not update if datetime has same value', async function () {
- const now = Date.now();
- const start = new Date(now);
- const end = new Date(now + 1000);
- const triggerSpy = jest.spyOn(PageFiltersStore, 'trigger');
- PageFiltersStore.updateDateTime({end, start, period: null, utc: null});
- await waitFor(() => PageFiltersStore.getState().selection.datetime.start === start);
- PageFiltersStore.updateDateTime({
- end: new Date(end.getTime()),
- start: new Date(start.getTime()),
- period: null,
- utc: null,
- });
- await tick();
- expect(triggerSpy).toHaveBeenCalledTimes(1);
- });
- it('updateEnvironments()', async function () {
- expect(PageFiltersStore.getState().selection.environments).toEqual([]);
- updateEnvironments(['alpha']);
- await tick();
- expect(PageFiltersStore.getState().selection.environments).toEqual(['alpha']);
- });
- it('does not update if environments has same value', async function () {
- PageFiltersStore.updateEnvironments(['alpha']);
- const triggerSpy = jest.spyOn(PageFiltersStore, 'trigger');
- await waitFor(
- () => PageFiltersStore.getState().selection.environments[0] === 'alpha'
- );
- expect(triggerSpy).toHaveBeenCalledTimes(1);
- PageFiltersStore.updateEnvironments(['alpha']);
- await tick();
- expect(triggerSpy).toHaveBeenCalledTimes(1);
- });
- it('updatePersistence()', async function () {
- expect(PageFiltersStore.getState().shouldPersist).toEqual(true);
- updatePersistence(false);
- await tick();
- expect(PageFiltersStore.getState().shouldPersist).toEqual(false);
- });
- it('can mark filters as pinned', async function () {
- expect(PageFiltersStore.getState().pinnedFilters).toEqual(new Set());
- pinFilter('projects', true);
- await tick();
- expect(PageFiltersStore.getState().pinnedFilters).toEqual(new Set(['projects']));
- pinFilter('environments', true);
- await tick();
- expect(PageFiltersStore.getState().pinnedFilters).toEqual(
- new Set(['projects', 'environments'])
- );
- pinFilter('projects', false);
- await tick();
- expect(PageFiltersStore.getState().pinnedFilters).toEqual(new Set(['environments']));
- });
- });
|