| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- import { itemReducer, makeExploreItemState, exploreReducer, makeInitialUpdateState } from './reducers';
- import { ExploreId, ExploreItemState, ExploreUrlState } from 'app/types/explore';
- import { reducerTester } from 'test/core/redux/reducerTester';
- import { scanStartAction, scanStopAction } from './actionTypes';
- import { Reducer } from 'redux';
- import { ActionOf } from 'app/core/redux/actionCreatorFactory';
- import { updateLocation } from 'app/core/actions/location';
- import { LogsDedupStrategy } from 'app/core/logs_model';
- import { serializeStateToUrlParam } from 'app/core/utils/explore';
- describe('Explore item reducer', () => {
- describe('scanning', () => {
- test('should start scanning', () => {
- const scanner = jest.fn();
- const initalState = {
- ...makeExploreItemState(),
- scanning: false,
- scanner: undefined,
- };
- reducerTester()
- .givenReducer(itemReducer as Reducer<ExploreItemState, ActionOf<any>>, initalState)
- .whenActionIsDispatched(scanStartAction({ exploreId: ExploreId.left, scanner }))
- .thenStateShouldEqual({
- ...makeExploreItemState(),
- scanning: true,
- scanner,
- });
- });
- test('should stop scanning', () => {
- const scanner = jest.fn();
- const initalState = {
- ...makeExploreItemState(),
- scanning: true,
- scanner,
- scanRange: {},
- };
- reducerTester()
- .givenReducer(itemReducer as Reducer<ExploreItemState, ActionOf<any>>, initalState)
- .whenActionIsDispatched(scanStopAction({ exploreId: ExploreId.left }))
- .thenStateShouldEqual({
- ...makeExploreItemState(),
- scanning: false,
- scanner: undefined,
- scanRange: undefined,
- });
- });
- });
- });
- export const setup = (urlStateOverrides?: any) => {
- const update = makeInitialUpdateState();
- const urlStateDefaults: ExploreUrlState = {
- datasource: 'some-datasource',
- queries: [],
- range: {
- from: '',
- to: '',
- },
- ui: {
- dedupStrategy: LogsDedupStrategy.none,
- showingGraph: false,
- showingTable: false,
- showingLogs: false,
- },
- };
- const urlState: ExploreUrlState = { ...urlStateDefaults, ...urlStateOverrides };
- const serializedUrlState = serializeStateToUrlParam(urlState);
- const initalState = { split: false, left: { urlState, update }, right: { urlState, update } };
- return {
- initalState,
- serializedUrlState,
- };
- };
- describe('Explore reducer', () => {
- describe('when updateLocation is dispatched', () => {
- describe('and payload does not contain a query', () => {
- it('then it should just return state', () => {
- reducerTester()
- .givenReducer(exploreReducer, {})
- .whenActionIsDispatched(updateLocation({ query: null }))
- .thenStateShouldEqual({});
- });
- });
- describe('and payload contains a query', () => {
- describe("but does not contain 'left'", () => {
- it('then it should just return state', () => {
- reducerTester()
- .givenReducer(exploreReducer, {})
- .whenActionIsDispatched(updateLocation({ query: {} }))
- .thenStateShouldEqual({});
- });
- });
- describe("and query contains a 'right'", () => {
- it('then it should add split in state', () => {
- const { initalState, serializedUrlState } = setup();
- const expectedState = { ...initalState, split: true };
- reducerTester()
- .givenReducer(exploreReducer, initalState)
- .whenActionIsDispatched(
- updateLocation({
- query: {
- left: serializedUrlState,
- right: serializedUrlState,
- },
- })
- )
- .thenStateShouldEqual(expectedState);
- });
- });
- describe("and query contains a 'left'", () => {
- describe('but urlState is not set in state', () => {
- it('then it should just add urlState and update in state', () => {
- const { initalState, serializedUrlState } = setup();
- const stateWithoutUrlState = { ...initalState, left: { urlState: null } };
- const expectedState = { ...initalState };
- reducerTester()
- .givenReducer(exploreReducer, stateWithoutUrlState)
- .whenActionIsDispatched(
- updateLocation({
- query: {
- left: serializedUrlState,
- },
- path: '/explore',
- })
- )
- .thenStateShouldEqual(expectedState);
- });
- });
- describe("but '/explore' is missing in path", () => {
- it('then it should just add urlState and update in state', () => {
- const { initalState, serializedUrlState } = setup();
- const expectedState = { ...initalState };
- reducerTester()
- .givenReducer(exploreReducer, initalState)
- .whenActionIsDispatched(
- updateLocation({
- query: {
- left: serializedUrlState,
- },
- path: '/dashboard',
- })
- )
- .thenStateShouldEqual(expectedState);
- });
- });
- describe("and '/explore' is in path", () => {
- describe('and datasource differs', () => {
- it('then it should return update datasource', () => {
- const { initalState, serializedUrlState } = setup();
- const expectedState = {
- ...initalState,
- left: {
- ...initalState.left,
- update: {
- ...initalState.left.update,
- datasource: true,
- },
- },
- };
- const stateWithDifferentDataSource = {
- ...initalState,
- left: {
- ...initalState.left,
- urlState: {
- ...initalState.left.urlState,
- datasource: 'different datasource',
- },
- },
- };
- reducerTester()
- .givenReducer(exploreReducer, stateWithDifferentDataSource)
- .whenActionIsDispatched(
- updateLocation({
- query: {
- left: serializedUrlState,
- },
- path: '/explore',
- })
- )
- .thenStateShouldEqual(expectedState);
- });
- });
- describe('and range differs', () => {
- it('then it should return update range', () => {
- const { initalState, serializedUrlState } = setup();
- const expectedState = {
- ...initalState,
- left: {
- ...initalState.left,
- update: {
- ...initalState.left.update,
- range: true,
- },
- },
- };
- const stateWithDifferentDataSource = {
- ...initalState,
- left: {
- ...initalState.left,
- urlState: {
- ...initalState.left.urlState,
- range: {
- from: 'now',
- to: 'now-6h',
- },
- },
- },
- };
- reducerTester()
- .givenReducer(exploreReducer, stateWithDifferentDataSource)
- .whenActionIsDispatched(
- updateLocation({
- query: {
- left: serializedUrlState,
- },
- path: '/explore',
- })
- )
- .thenStateShouldEqual(expectedState);
- });
- });
- describe('and queries differs', () => {
- it('then it should return update queries', () => {
- const { initalState, serializedUrlState } = setup();
- const expectedState = {
- ...initalState,
- left: {
- ...initalState.left,
- update: {
- ...initalState.left.update,
- queries: true,
- },
- },
- };
- const stateWithDifferentDataSource = {
- ...initalState,
- left: {
- ...initalState.left,
- urlState: {
- ...initalState.left.urlState,
- queries: [{ expr: '{__filename__="some.log"}' }],
- },
- },
- };
- reducerTester()
- .givenReducer(exploreReducer, stateWithDifferentDataSource)
- .whenActionIsDispatched(
- updateLocation({
- query: {
- left: serializedUrlState,
- },
- path: '/explore',
- })
- )
- .thenStateShouldEqual(expectedState);
- });
- });
- describe('and ui differs', () => {
- it('then it should return update ui', () => {
- const { initalState, serializedUrlState } = setup();
- const expectedState = {
- ...initalState,
- left: {
- ...initalState.left,
- update: {
- ...initalState.left.update,
- ui: true,
- },
- },
- };
- const stateWithDifferentDataSource = {
- ...initalState,
- left: {
- ...initalState.left,
- urlState: {
- ...initalState.left.urlState,
- ui: {
- ...initalState.left.urlState.ui,
- showingGraph: true,
- },
- },
- },
- };
- reducerTester()
- .givenReducer(exploreReducer, stateWithDifferentDataSource)
- .whenActionIsDispatched(
- updateLocation({
- query: {
- left: serializedUrlState,
- },
- path: '/explore',
- })
- )
- .thenStateShouldEqual(expectedState);
- });
- });
- describe('and nothing differs', () => {
- fit('then it should return update ui', () => {
- const { initalState, serializedUrlState } = setup();
- const expectedState = { ...initalState };
- reducerTester()
- .givenReducer(exploreReducer, initalState)
- .whenActionIsDispatched(
- updateLocation({
- query: {
- left: serializedUrlState,
- },
- path: '/explore',
- })
- )
- .thenStateShouldEqual(expectedState);
- });
- });
- });
- });
- });
- });
- });
|