mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
138 lines (116 loc) • 5.84 kB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import assert from 'assert';
import nock from 'nock';
import * as Actions from 'actions/search';
import {Client4} from 'client';
import TestHelper from 'test/test_helper';
import configureStore from 'test/test_store';
describe('Actions.Search', () => {
let store;
beforeAll(async () => {
await TestHelper.initBasic(Client4);
});
beforeEach(async () => {
store = await configureStore();
});
afterAll(async () => {
await TestHelper.tearDown();
});
it('Perform Search', async () => {
const {dispatch, getState} = store;
let post1 = {
...TestHelper.fakePost(TestHelper.basicChannel.id),
message: 'try searching for this using the first and last word',
};
let post2 = {
...TestHelper.fakePost(TestHelper.basicChannel.id),
message: 'return this message in second attempt',
};
nock(Client4.getBaseRoute()).
post('/posts').
reply(201, {...post1, id: TestHelper.generateId()});
post1 = await Client4.createPost(post1);
nock(Client4.getBaseRoute()).
post('/posts').
reply(201, {...post2, id: TestHelper.generateId()});
post2 = await Client4.createPost(post2);
// Test for a couple of words
const search1 = 'try word';
nock(Client4.getTeamsRoute()).
post(`/${TestHelper.basicTeam.id}/posts/search`).
reply(200, {order: [post1.id], posts: {[post1.id]: post1}});
nock(Client4.getChannelsRoute()).
get(`/${TestHelper.basicChannel.id}/members/me`).
reply(201, {user_id: TestHelper.basicUser.id, channel_id: TestHelper.basicChannel.id});
await Actions.searchPosts(TestHelper.basicTeam.id, search1)(dispatch, getState);
let state = getState();
let {recent, results} = state.entities.search;
const {posts} = state.entities.posts;
let current = state.entities.search.current[TestHelper.basicTeam.id];
assert.ok(recent[TestHelper.basicTeam.id]);
let searchIsPresent = recent[TestHelper.basicTeam.id].findIndex((r) => r.terms === search1);
assert.ok(searchIsPresent !== -1);
assert.equal(Object.keys(recent[TestHelper.basicTeam.id]).length, 1);
assert.equal(results.length, 1);
assert.ok(posts[results[0]]);
assert.ok(!current.isEnd);
// Search the next page and check the end of the search
nock(Client4.getTeamsRoute()).
post(`/${TestHelper.basicTeam.id}/posts/search`).
reply(200, {order: [], posts: {}});
await Actions.searchPostsWithParams(TestHelper.basicTeam.id, {terms: search1, page: 1})(dispatch, getState);
state = getState();
current = state.entities.search.current[TestHelper.basicTeam.id];
recent = state.entities.search.recent;
results = state.entities.search.results;
assert.ok(recent[TestHelper.basicTeam.id]);
searchIsPresent = recent[TestHelper.basicTeam.id].findIndex((r) => r.terms === search1);
assert.ok(searchIsPresent !== -1);
assert.equal(Object.keys(recent[TestHelper.basicTeam.id]).length, 1);
assert.equal(results.length, 1);
assert.ok(current.isEnd);
// DISABLED
// Test for posts from a user in a channel
//const search2 = `from: ${TestHelper.basicUser.username} in: ${TestHelper.basicChannel.name}`;
//nock(Client4.getTeamsRoute(), `/${TestHelper.basicTeam.id}/posts/search`).
//post(`/${TestHelper.basicTeam.id}/posts/search`).
//reply(200, {order: [post1.id, post2.id, TestHelper.basicPost.id], posts: {[post1.id]: post1, [TestHelper.basicPost.id]: TestHelper.basicPost, [post2.id]: post2}});
//nock(Client4.getChannelsRoute()).
//get(`/${TestHelper.basicChannel.id}/members/me`).
//reply(201, {user_id: TestHelper.basicUser.id, channel_id: TestHelper.basicChannel.id});
//
//await Actions.searchPosts(
//TestHelper.basicTeam.id,
//search2
//)(dispatch, getState);
//
//state = getState();
//recent = state.entities.search.recent;
//results = state.entities.search.results;
//searchIsPresent = recent[TestHelper.basicTeam.id].findIndex((r) => r.terms === search1);
//assert.ok(searchIsPresent !== -1);
//assert.equal(Object.keys(recent[TestHelper.basicTeam.id]).length, 2);
//assert.equal(results.length, 3);
// Clear posts from the search store
//await Actions.clearSearch()(dispatch, getState);
//state = getState();
//recent = state.entities.search.recent;
//results = state.entities.search.results;
//searchIsPresent = recent[TestHelper.basicTeam.id].findIndex((r) => r.terms === search1);
//assert.ok(searchIsPresent !== -1);
//assert.equal(Object.keys(recent[TestHelper.basicTeam.id]).length, 2);
//assert.equal(results.length, 0);
// Clear a recent term
//await Actions.removeSearchTerms(TestHelper.basicTeam.id, search2)(dispatch, getState);
//state = getState();
//recent = state.entities.search.recent;
//results = state.entities.search.results;
//searchIsPresent = recent[TestHelper.basicTeam.id].findIndex((r) => r.terms === search1);
//assert.ok(searchIsPresent !== -1);
//searchIsPresent = recent[TestHelper.basicTeam.id].findIndex((r) => r.terms === search2);
//assert.ok(searchIsPresent === -1);
//assert.equal(Object.keys(recent[TestHelper.basicTeam.id]).length, 1);
//assert.equal(results.length, 0);
});
});