mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
412 lines (317 loc) • 14.6 kB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import fs from 'fs';
import assert from 'assert';
import nock from 'nock';
import * as Actions from 'actions/emojis';
import {Client4} from 'client';
import {GeneralTypes} from 'action_types';
import TestHelper from 'test/test_helper';
import configureStore from 'test/test_store';
const OK_RESPONSE = {status: 'OK'};
describe('Actions.Emojis', () => {
let store;
beforeAll(async () => {
await TestHelper.initBasic(Client4);
});
beforeEach(async () => {
store = await configureStore();
});
afterAll(async () => {
await TestHelper.tearDown();
});
it('createCustomEmoji', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
const state = store.getState();
const emojis = state.entities.emojis.customEmoji;
assert.ok(emojis);
assert.ok(emojis[created.id]);
});
it('getCustomEmojis', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
get('/emoji').
query(true).
reply(200, [created]);
await Actions.getCustomEmojis()(store.dispatch, store.getState);
const state = store.getState();
const emojis = state.entities.emojis.customEmoji;
assert.ok(emojis);
assert.ok(emojis[created.id]);
});
it('getAllCustomEmojis', async () => {
store.dispatch({type: GeneralTypes.RECEIVED_SERVER_VERSION, data: '4.0.0'});
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created1} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
fs.createReadStream('test/assets/images/test.png'),
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created2} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
fs.createReadStream('test/assets/images/test.png'),
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
get('/emoji').
query(true).
reply(200, [created1]);
nock(Client4.getBaseRoute()).
get('/emoji').
query(true).
reply(200, [created2]);
nock(Client4.getBaseRoute()).
get('/emoji').
query(true).
reply(200, []);
await Actions.getAllCustomEmojis(1)(store.dispatch, store.getState);
let state = store.getState();
let emojis = state.entities.emojis.customEmoji;
assert.ok(emojis);
assert.ok(emojis[created1.id]);
assert.ok(emojis[created2.id]);
nock(Client4.getBaseRoute()).
delete(`/emoji/${created2.id}`).
reply(200, OK_RESPONSE);
// Should have all emojis minus the deleted one
await Client4.deleteCustomEmoji(created2.id);
nock(Client4.getBaseRoute()).
get('/emoji').
query(true).
reply(200, [created1]);
nock(Client4.getBaseRoute()).
get('/emoji').
query(true).
reply(200, []);
await Actions.getAllCustomEmojis(1)(store.dispatch, store.getState);
state = store.getState();
emojis = state.entities.emojis.customEmoji;
assert.ok(emojis);
assert.ok(emojis[created1.id]);
assert.ok(!emojis[created2.id]);
nock(Client4.getBaseRoute()).
delete(`/emoji/${created1.id}`).
reply(200, OK_RESPONSE);
// Cleanup
Client4.deleteCustomEmoji(created1.id);
});
it('deleteCustomEmoji', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
delete(`/emoji/${created.id}`).
reply(200, OK_RESPONSE);
await Actions.deleteCustomEmoji(created.id)(store.dispatch, store.getState);
const state = store.getState();
const emojis = state.entities.emojis.customEmoji;
assert.ok(!emojis[created.id]);
});
it('loadProfilesForCustomEmojis', async () => {
const fakeUser = TestHelper.fakeUser();
fakeUser.id = TestHelper.generateId();
const junkUserId = TestHelper.generateId();
const testEmojis = [{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
{
name: TestHelper.generateId(),
creator_id: fakeUser.id,
},
{
name: TestHelper.generateId(),
creator_id: junkUserId,
}];
nock(Client4.getUsersRoute()).
post('/ids').
reply(200, [TestHelper.basicUser, fakeUser]);
await store.dispatch(Actions.loadProfilesForCustomEmojis(testEmojis));
const state = store.getState();
const profiles = state.entities.users.profiles;
assert.ok(profiles[TestHelper.basicUser.id]);
assert.ok(profiles[fakeUser.id]);
assert.ok(!profiles[junkUserId]);
});
it('searchCustomEmojis', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
post('/emoji/search').
reply(200, [created]);
await Actions.searchCustomEmojis(created.name, {prefix_only: true})(store.dispatch, store.getState);
const state = store.getState();
const emojis = state.entities.emojis.customEmoji;
assert.ok(emojis);
assert.ok(emojis[created.id]);
});
it('autocompleteCustomEmojis', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
get('/emoji/autocomplete').
query(true).
reply(200, [created]);
await Actions.autocompleteCustomEmojis(created.name)(store.dispatch, store.getState);
const state = store.getState();
const emojis = state.entities.emojis.customEmoji;
assert.ok(emojis);
assert.ok(emojis[created.id]);
});
it('getCustomEmoji', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
get(`/emoji/${created.id}`).
reply(200, created);
await Actions.getCustomEmoji(created.id)(store.dispatch, store.getState);
const state = store.getState();
const emojis = state.entities.emojis.customEmoji;
assert.ok(emojis);
assert.ok(emojis[created.id]);
});
it('getCustomEmojiByName', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
get(`/emoji/name/${created.name}`).
reply(200, created);
await Actions.getCustomEmojiByName(created.name)(store.dispatch, store.getState);
let state = store.getState();
const emojis = state.entities.emojis.customEmoji;
assert.ok(emojis);
assert.ok(emojis[created.id]);
const missingName = TestHelper.generateId();
nock(Client4.getBaseRoute()).
get(`/emoji/name/${missingName}`).
reply(404, {message: 'Not found', status_code: 404});
await Actions.getCustomEmojiByName(missingName)(store.dispatch, store.getState);
state = store.getState();
assert.ok(state.entities.emojis.nonExistentEmoji.has(missingName));
});
it('getCustomEmojisByName', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
get(`/emoji/name/${created.name}`).
reply(200, created);
const missingName = TestHelper.generateId();
nock(Client4.getBaseRoute()).
get(`/emoji/name/${missingName}`).
reply(404, {message: 'Not found', status_code: 404});
await Actions.getCustomEmojisByName([created.name, missingName])(store.dispatch, store.getState);
const state = store.getState();
assert.ok(state.entities.emojis.customEmoji[created.id]);
assert.ok(state.entities.emojis.nonExistentEmoji.has(missingName));
});
it('getCustomEmojisInText', async () => {
const testImageData = fs.createReadStream('test/assets/images/test.png');
nock(Client4.getBaseRoute()).
post('/emoji').
reply(201, {id: TestHelper.generateId(), create_at: 1507918415696, update_at: 1507918415696, delete_at: 0, creator_id: TestHelper.basicUser.id, name: TestHelper.generateId()});
const {data: created} = await Actions.createCustomEmoji(
{
name: TestHelper.generateId(),
creator_id: TestHelper.basicUser.id,
},
testImageData,
)(store.dispatch, store.getState);
nock(Client4.getBaseRoute()).
get(`/emoji/name/${created.name}`).
reply(200, created);
const missingName = TestHelper.generateId();
nock(Client4.getBaseRoute()).
get(`/emoji/name/${missingName}`).
reply(404, {message: 'Not found', status_code: 404});
await Actions.getCustomEmojisInText(`some text :${created.name}: :${missingName}:`)(store.dispatch, store.getState);
const state = store.getState();
assert.ok(state.entities.emojis.customEmoji[created.id]);
assert.ok(state.entities.emojis.nonExistentEmoji.has(missingName));
});
});