mattermost-mobile/test/service/actions/posts.test.js
2016-12-22 13:07:23 -03:00

405 lines
12 KiB
JavaScript

// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import assert from 'assert';
import * as Actions from 'service/actions/posts';
import Client from 'service/client';
import configureStore from 'app/store';
import {Constants, RequestStatus} from 'service/constants';
import TestHelper from 'test/test_helper';
describe('Actions.Posts', () => {
let store;
before(async () => {
await TestHelper.initBasic(Client);
});
beforeEach(() => {
store = configureStore();
});
after(async () => {
await TestHelper.basicClient.logout();
});
it('createPost', async () => {
const channelId = TestHelper.basicChannel.id;
const post = TestHelper.fakePost(channelId);
await Actions.createPost(
TestHelper.basicTeam.id,
post
)(store.dispatch, store.getState);
const state = store.getState();
const createRequest = state.requests.posts.createPost;
if (createRequest.status === RequestStatus.FAILURE) {
throw new Error(JSON.stringify(createRequest.error));
}
const {posts, postsByChannel} = state.entities.posts;
assert.ok(posts);
assert.ok(postsByChannel);
assert.ok(postsByChannel[channelId]);
let found = false;
for (const storedPost of Object.values(posts)) {
if (storedPost.message === post.message) {
found = true;
break;
}
}
assert.ok(found, 'failed to find new post in posts');
found = false;
for (const postIdInChannel of postsByChannel[channelId]) {
if (posts[postIdInChannel].message === post.message) {
found = true;
break;
}
}
assert.ok(found, 'failed to find new post in postsByChannel');
});
it('editPost', async () => {
const teamId = TestHelper.basicTeam.id;
const channelId = TestHelper.basicChannel.id;
const post = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const message = post.message;
post.message = `${message} (edited)`;
await Actions.editPost(
teamId,
post
)(store.dispatch, store.getState);
const state = store.getState();
const editRequest = state.requests.posts.editPost;
const {posts} = state.entities.posts;
if (editRequest.status === RequestStatus.FAILURE) {
throw new Error(JSON.stringify(editRequest.error));
}
assert.ok(posts);
assert.ok(posts[post.id]);
assert.strictEqual(
posts[post.id].message,
`${message} (edited)`
);
});
it('deletePost', async () => {
const teamId = TestHelper.basicTeam.id;
const channelId = TestHelper.basicChannel.id;
await Actions.createPost(
teamId,
TestHelper.fakePost(channelId)
)(store.dispatch, store.getState);
const initialPosts = store.getState().entities.posts;
const created = initialPosts.posts[initialPosts.postsByChannel[channelId][0]];
await Actions.deletePost(teamId, created)(store.dispatch, store.getState);
const state = store.getState();
const deleteRequest = state.requests.posts.deletePost;
const {posts} = state.entities.posts;
if (deleteRequest.status === RequestStatus.FAILURE) {
throw new Error(JSON.stringify(deleteRequest.error));
}
assert.ok(posts);
assert.ok(posts[created.id]);
assert.strictEqual(
posts[created.id].state,
Constants.POST_DELETED
);
});
it('removePost', async () => {
const teamId = TestHelper.basicTeam.id;
const channelId = TestHelper.basicChannel.id;
const postId = TestHelper.basicPost.id;
const post1a = await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: postId}
);
await Actions.getPosts(
teamId,
channelId
)(store.dispatch, store.getState);
const postsCount = store.getState().entities.posts.postsByChannel[channelId].length;
await Actions.removePost(
TestHelper.basicPost
)(store.dispatch, store.getState);
const {posts, postsByChannel} = store.getState().entities.posts;
assert.ok(posts);
assert.ok(postsByChannel);
assert.ok(postsByChannel[channelId]);
// this should count that the basic post and post1a were removed
assert.equal(postsByChannel[channelId].length, postsCount - 2);
assert.ok(!posts[postId]);
assert.ok(!posts[post1a.id]);
});
it('getPost', async () => {
const teamId = TestHelper.basicTeam.id;
const channelId = TestHelper.basicChannel.id;
const post = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
await Actions.getPost(
teamId,
channelId,
post.id
)(store.dispatch, store.getState);
const state = store.getState();
const getRequest = state.requests.posts.getPost;
const {posts, postsByChannel} = state.entities.posts;
if (getRequest.status === RequestStatus.FAILURE) {
throw new Error(JSON.stringify(getRequest.error));
}
assert.ok(posts);
assert.ok(postsByChannel);
assert.ok(postsByChannel[channelId]);
assert.ok(posts[post.id]);
let found = false;
for (const postIdInChannel of postsByChannel[channelId]) {
if (postIdInChannel === post.id) {
found = true;
break;
}
}
assert.ok(found, 'failed to find post in postsByChannel');
});
it('getPosts', async () => {
const teamId = TestHelper.basicTeam.id;
const channelId = TestHelper.basicChannel.id;
const post1 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post1a = await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: post1.id}
);
const post2 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post3 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post3a = await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: post3.id}
);
await Actions.getPosts(
teamId,
channelId
)(store.dispatch, store.getState);
const state = store.getState();
const getRequest = state.requests.posts.getPosts;
const {posts, postsByChannel} = state.entities.posts;
if (getRequest.status === RequestStatus.FAILURE) {
throw new Error(JSON.stringify(getRequest.error));
}
assert.ok(posts);
assert.ok(postsByChannel);
const postsInChannel = postsByChannel[channelId];
assert.ok(postsInChannel);
assert.equal(postsInChannel[0], post3a.id, 'wrong order for post3a');
assert.equal(postsInChannel[1], post3.id, 'wrong order for post3');
assert.equal(postsInChannel[3], post1a.id, 'wrong order for post1a');
assert.ok(posts[post1.id]);
assert.ok(posts[post1a.id]);
assert.ok(posts[post2.id]);
assert.ok(posts[post3.id]);
assert.ok(posts[post3a.id]);
});
it('getPostsSince', async () => {
const teamId = TestHelper.basicTeam.id;
const channelId = TestHelper.basicChannel.id;
const post1 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: post1.id}
);
const post2 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post3 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post3a = await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: post3.id}
);
await Actions.getPostsSince(
teamId,
channelId,
post2.create_at
)(store.dispatch, store.getState);
const state = store.getState();
const getRequest = state.requests.posts.getPostsSince;
const {posts, postsByChannel} = state.entities.posts;
if (getRequest.status === RequestStatus.FAILURE) {
throw new Error(JSON.stringify(getRequest.error));
}
assert.ok(posts);
assert.ok(postsByChannel);
const postsInChannel = postsByChannel[channelId];
assert.ok(postsInChannel);
assert.equal(postsInChannel[0], post3a.id, 'wrong order for post3a');
assert.equal(postsInChannel[1], post3.id, 'wrong order for post3');
assert.equal(postsInChannel.length, 2, 'wrong size');
});
it('getPostsBefore', async () => {
const teamId = TestHelper.basicTeam.id;
const channelId = TestHelper.basicChannel.id;
const post1 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post1a = await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: post1.id}
);
const post2 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post3 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: post3.id}
);
await Actions.getPostsBefore(
teamId,
channelId,
post2.id,
0,
10
)(store.dispatch, store.getState);
const state = store.getState();
const getRequest = state.requests.posts.getPostsBefore;
const {posts, postsByChannel} = state.entities.posts;
if (getRequest.status === RequestStatus.FAILURE) {
throw new Error(JSON.stringify(getRequest.error));
}
assert.ok(posts);
assert.ok(postsByChannel);
const postsInChannel = postsByChannel[channelId];
assert.ok(postsInChannel);
assert.equal(postsInChannel[0], post1a.id, 'wrong order for post1a');
assert.equal(postsInChannel[1], post1.id, 'wrong order for post1');
assert.equal(postsInChannel.length, 10, 'wrong size');
});
it('getPostsAfter', async () => {
const teamId = TestHelper.basicTeam.id;
const channelId = TestHelper.basicChannel.id;
const post1 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: post1.id}
);
const post2 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post3 = await Client.createPost(
teamId,
TestHelper.fakePost(channelId)
);
const post3a = await Client.createPost(
teamId,
{...TestHelper.fakePost(channelId), root_id: post3.id}
);
await Actions.getPostsAfter(
teamId,
channelId,
post2.id,
0,
10
)(store.dispatch, store.getState);
const state = store.getState();
const getRequest = state.requests.posts.getPostsAfter;
const {posts, postsByChannel} = state.entities.posts;
if (getRequest.status === RequestStatus.FAILURE) {
throw new Error(JSON.stringify(getRequest.error));
}
assert.ok(posts);
assert.ok(postsByChannel);
const postsInChannel = postsByChannel[channelId];
assert.ok(postsInChannel);
assert.equal(postsInChannel[0], post3a.id, 'wrong order for post3a');
assert.equal(postsInChannel[1], post3.id, 'wrong order for post3');
assert.equal(postsInChannel.length, 2, 'wrong size');
});
});