mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
289 lines (254 loc) • 10.1 kB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import assert from 'assert';
import {
PostTypes,
SearchTypes,
UserTypes,
} from 'action_types';
import reducer from 'reducers/entities/search';
describe('reducers.entities.search', () => {
describe('results', () => {
it('initial state', () => {
const inputState = undefined; // eslint-disable-line no-undef
const action = {};
const expectedState = [];
const actualState = reducer({results: inputState}, action);
assert.deepEqual(actualState.results, expectedState);
});
describe('SearchTypes.RECEIVED_SEARCH_POSTS', () => {
it('first results received', () => {
const inputState = [];
const action = {
type: SearchTypes.RECEIVED_SEARCH_POSTS,
data: {
order: ['abcd', 'efgh'],
posts: {
abcd: {id: 'abcd'},
efgh: {id: 'efgh'},
},
},
};
const expectedState = ['abcd', 'efgh'];
const actualState = reducer({results: inputState}, action);
assert.deepEqual(actualState.results, expectedState);
});
it('multiple results received', () => {
const inputState = ['1234', '1235'];
const action = {
type: SearchTypes.RECEIVED_SEARCH_POSTS,
data: {
order: ['abcd', 'efgh'],
posts: {
abcd: {id: 'abcd'},
efgh: {id: 'efgh'},
},
},
};
const expectedState = ['abcd', 'efgh'];
const actualState = reducer({results: inputState}, action);
assert.deepEqual(actualState.results, expectedState);
});
});
describe('PostTypes.POST_REMOVED', () => {
it('post in results', () => {
const inputState = ['abcd', 'efgh'];
const action = {
type: PostTypes.POST_REMOVED,
data: {
id: 'efgh',
},
};
const expectedState = ['abcd'];
const actualState = reducer({results: inputState}, action);
assert.deepEqual(actualState.results, expectedState);
});
it('post not in results', () => {
const inputState = ['abcd', 'efgh'];
const action = {
type: PostTypes.POST_REMOVED,
data: {
id: '1234',
},
};
const expectedState = ['abcd', 'efgh'];
const actualState = reducer({results: inputState}, action);
assert.deepEqual(actualState.results, expectedState);
assert.equal(actualState.results, inputState);
});
});
describe('SearchTypes.REMOVE_SEARCH_POSTS', () => {
const inputState = ['abcd', 'efgh'];
const action = {
type: SearchTypes.REMOVE_SEARCH_POSTS,
};
const expectedState = [];
const actualState = reducer({results: inputState}, action);
assert.deepEqual(actualState.results, expectedState);
});
describe('UserTypes.LOGOUT_SUCCESS', () => {
const inputState = ['abcd', 'efgh'];
const action = {
type: UserTypes.LOGOUT_SUCCESS,
};
const expectedState = [];
const actualState = reducer({results: inputState}, action);
assert.deepEqual(actualState.results, expectedState);
});
});
describe('matches', () => {
it('initial state', () => {
const inputState = undefined; // eslint-disable-line no-undef
const action = {};
const expectedState = {};
const actualState = reducer({matches: inputState}, action);
assert.deepEqual(actualState.matches, expectedState);
});
describe('SearchTypes.RECEIVED_SEARCH_POSTS', () => {
it('no matches received', () => {
const inputState = {};
const action = {
type: SearchTypes.RECEIVED_SEARCH_POSTS,
data: {
order: ['abcd', 'efgh'],
posts: {
abcd: {id: 'abcd'},
efgh: {id: 'efgh'},
},
},
};
const expectedState = {};
const actualState = reducer({matches: inputState}, action);
assert.deepEqual(actualState.matches, expectedState);
});
it('first results received', () => {
const inputState = {};
const action = {
type: SearchTypes.RECEIVED_SEARCH_POSTS,
data: {
order: ['abcd', 'efgh'],
posts: {
abcd: {id: 'abcd'},
efgh: {id: 'efgh'},
},
matches: {
abcd: ['test', 'testing'],
efgh: ['tests'],
},
},
};
const expectedState = {
abcd: ['test', 'testing'],
efgh: ['tests'],
};
const actualState = reducer({matches: inputState}, action);
assert.deepEqual(actualState.matches, expectedState);
});
it('multiple results received', () => {
const inputState = {
1234: ['foo', 'bar'],
5678: ['foo'],
};
const action = {
type: SearchTypes.RECEIVED_SEARCH_POSTS,
data: {
order: ['abcd', 'efgh'],
posts: {
abcd: {id: 'abcd'},
efgh: {id: 'efgh'},
},
matches: {
abcd: ['test', 'testing'],
efgh: ['tests'],
},
},
};
const expectedState = {
abcd: ['test', 'testing'],
efgh: ['tests'],
};
const actualState = reducer({matches: inputState}, action);
assert.deepEqual(actualState.matches, expectedState);
});
});
describe('PostTypes.POST_REMOVED', () => {
it('post in results', () => {
const inputState = {
abcd: ['test', 'testing'],
efgh: ['tests'],
};
const action = {
type: PostTypes.POST_REMOVED,
data: {
id: 'efgh',
},
};
const expectedState = {
abcd: ['test', 'testing'],
};
const actualState = reducer({matches: inputState}, action);
assert.deepEqual(actualState.matches, expectedState);
});
it('post not in results', () => {
const inputState = {
abcd: ['test', 'testing'],
efgh: ['tests'],
};
const action = {
type: PostTypes.POST_REMOVED,
data: {
id: '1234',
},
};
const expectedState = {
abcd: ['test', 'testing'],
efgh: ['tests'],
};
const actualState = reducer({matches: inputState}, action);
assert.deepEqual(actualState.matches, expectedState);
assert.equal(actualState.matches, inputState);
});
});
describe('SearchTypes.REMOVE_SEARCH_POSTS', () => {
const inputState = {
abcd: ['test', 'testing'],
efgh: ['tests'],
};
const action = {
type: SearchTypes.REMOVE_SEARCH_POSTS,
};
const expectedState = [];
const actualState = reducer({matches: inputState}, action);
assert.deepEqual(actualState.matches, expectedState);
});
describe('UserTypes.LOGOUT_SUCCESS', () => {
const inputState = {
abcd: ['test', 'testing'],
efgh: ['tests'],
};
const action = {
type: UserTypes.LOGOUT_SUCCESS,
};
const expectedState = [];
const actualState = reducer({matches: inputState}, action);
assert.deepEqual(actualState.matches, expectedState);
});
});
describe('pinned', () => {
it('do not show multiples of the same post', () => {
const inputState = {
abcd: ['1234', '5678'],
};
const action = {
type: PostTypes.RECEIVED_POST,
data: {
id: '5678',
is_pinned: true,
channel_id: 'abcd',
},
};
const actualState = reducer({pinned: inputState}, action);
assert.deepEqual(actualState.pinned, inputState);
});
});
});