169 lines
4.5 KiB
TypeScript
169 lines
4.5 KiB
TypeScript
import { describe, expect, it, beforeEach, jest } from '@jest/globals';
|
|
|
|
jest.mock('App/mstore/types/filterItem', () => {
|
|
return class FilterItem {
|
|
key: any;
|
|
value: any;
|
|
operator: any;
|
|
source: any;
|
|
sourceOperator: any;
|
|
isEvent: any;
|
|
filters: any;
|
|
constructor(data: any = {}) {
|
|
Object.assign(this, data);
|
|
}
|
|
fromJson(data: any) {
|
|
Object.assign(this, data);
|
|
return this;
|
|
}
|
|
merge(data: any) {
|
|
Object.assign(this, data);
|
|
}
|
|
toJson() {
|
|
return {
|
|
type: this.key || this.type,
|
|
value: this.value,
|
|
operator: this.operator,
|
|
source: this.source,
|
|
sourceOperator: this.sourceOperator,
|
|
isEvent: this.isEvent,
|
|
filters: Array.isArray(this.filters) ? this.filters : [],
|
|
};
|
|
}
|
|
};
|
|
});
|
|
|
|
jest.mock('Types/filter/newFilter', () => {
|
|
const { FilterKey, FilterCategory } = require('Types/filter/filterType');
|
|
return {
|
|
filtersMap: {
|
|
[FilterKey.USERID]: {
|
|
key: FilterKey.USERID,
|
|
type: FilterKey.USERID,
|
|
category: FilterCategory.USER,
|
|
operator: 'is',
|
|
value: [''],
|
|
},
|
|
[FilterKey.DURATION]: {
|
|
key: FilterKey.DURATION,
|
|
type: FilterKey.DURATION,
|
|
category: FilterCategory.SESSION,
|
|
operator: 'is',
|
|
value: [0, 0],
|
|
},
|
|
[FilterKey.ISSUE]: {
|
|
key: FilterKey.ISSUE,
|
|
type: FilterKey.ISSUE,
|
|
category: FilterCategory.ISSUE,
|
|
operator: 'is',
|
|
value: [],
|
|
},
|
|
},
|
|
conditionalFiltersMap: {},
|
|
generateFilterOptions: jest.fn(() => []),
|
|
liveFiltersMap: {},
|
|
mobileConditionalFiltersMap: {},
|
|
};
|
|
});
|
|
|
|
const mockSessionFetch = jest.fn().mockResolvedValue({});
|
|
|
|
const mockSessionStore = {
|
|
fetchSessions: mockSessionFetch,
|
|
total: 0,
|
|
clearList: jest.fn(),
|
|
};
|
|
const mockSettingsStore = {
|
|
sessionSettings: { durationFilter: { count: 0 } },
|
|
};
|
|
|
|
jest.mock('App/services', () => ({
|
|
searchService: { fetchSavedSearch: jest.fn() },
|
|
sessionService: {
|
|
getSessions: jest.fn().mockResolvedValue({ sessions: [], total: 0 }),
|
|
},
|
|
}));
|
|
jest.mock('App/mstore', () => ({
|
|
sessionStore: mockSessionStore,
|
|
settingsStore: mockSettingsStore,
|
|
}));
|
|
|
|
import SearchStore, {
|
|
checkValues,
|
|
filterMap,
|
|
} from '../../app/mstore/searchStore';
|
|
import SavedSearch from '../../app/mstore/types/savedSearch';
|
|
import { FilterCategory, FilterKey } from '../../app/types/filter/filterType';
|
|
|
|
describe('searchStore utilities', () => {
|
|
it('checkValues handles duration', () => {
|
|
const res = checkValues(FilterKey.DURATION, ['', 1000]);
|
|
expect(res).toEqual([0, 1000]);
|
|
});
|
|
|
|
it('checkValues filters empty values', () => {
|
|
const res = checkValues(FilterKey.USERID, ['a', '', null]);
|
|
expect(res).toEqual(['a']);
|
|
});
|
|
|
|
it('filterMap maps metadata type correctly', () => {
|
|
const data = {
|
|
category: FilterCategory.METADATA,
|
|
value: ['val'],
|
|
key: '_source',
|
|
operator: 'is',
|
|
sourceOperator: 'is',
|
|
source: '_source',
|
|
custom: false,
|
|
isEvent: false,
|
|
filters: null,
|
|
};
|
|
const mapped = filterMap(data as any);
|
|
expect(mapped.type).toBe(FilterKey.METADATA);
|
|
expect(mapped.source).toBe('source');
|
|
expect(mapped.value).toEqual(['val']);
|
|
});
|
|
});
|
|
|
|
describe('SearchStore class', () => {
|
|
let store: SearchStore;
|
|
beforeEach(() => {
|
|
store = new SearchStore();
|
|
mockSessionFetch.mockClear();
|
|
});
|
|
|
|
it('applySavedSearch sets filters', () => {
|
|
const saved = new SavedSearch({
|
|
name: 'test',
|
|
filter: {
|
|
filters: [{ key: FilterKey.USERID, value: ['123'], operator: 'is' }],
|
|
},
|
|
});
|
|
store.applySavedSearch(saved);
|
|
expect(store.savedSearch).toBe(saved);
|
|
expect(store.instance.filters.length).toBe(1);
|
|
// @ts-ignore
|
|
expect(store.instance.filters[0].key).toBe(FilterKey.USERID);
|
|
});
|
|
|
|
it('addFilterByKeyAndValue adds filter and triggers fetch', () => {
|
|
store.addFilterByKeyAndValue(FilterKey.USERID, ['42']);
|
|
expect(store.instance.filters.length).toBe(1);
|
|
expect(mockSessionFetch).toHaveBeenCalled();
|
|
});
|
|
|
|
it('fetchSessions applies duration filter from settings', async () => {
|
|
mockSettingsStore.sessionSettings.durationFilter = {
|
|
operator: '<',
|
|
count: 1,
|
|
countType: 'sec',
|
|
};
|
|
await store.fetchSessions();
|
|
const call = mockSessionFetch.mock.calls[0][0];
|
|
const duration = call.filters.find(
|
|
(f: any) => f.type === FilterKey.DURATION,
|
|
);
|
|
expect(duration).toBeTruthy();
|
|
expect(duration.value).toEqual([1000, 0]);
|
|
});
|
|
});
|