update and add tests (#28140)
Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
eb967b6b6d
Коммит
4fc77ce368
@@ -0,0 +1,131 @@
|
|||||||
|
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||||
|
// See LICENSE.txt for license information.
|
||||||
|
|
||||||
|
import nock from 'nock';
|
||||||
|
|
||||||
|
import type {PostMetadata} from '@mattermost/types/posts';
|
||||||
|
|
||||||
|
import * as Actions from 'mattermost-redux/actions/status_profile_polling';
|
||||||
|
import {Client4} from 'mattermost-redux/client';
|
||||||
|
|
||||||
|
import {waitFor} from 'tests/react_testing_utils';
|
||||||
|
|
||||||
|
import TestHelper from '../../test/test_helper';
|
||||||
|
import configureStore from '../../test/test_store';
|
||||||
|
|
||||||
|
describe('Actions.StatusProfilePolling', () => {
|
||||||
|
let store = configureStore();
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
TestHelper.initBasic(Client4);
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
store = configureStore({
|
||||||
|
entities: {
|
||||||
|
general: {
|
||||||
|
config: {
|
||||||
|
EnableUserStatuses: 'true',
|
||||||
|
},
|
||||||
|
license: {
|
||||||
|
IsLicensed: 'true',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
users: {
|
||||||
|
currentUserId: 'current_user_id',
|
||||||
|
profiles: {
|
||||||
|
current_user_id: {
|
||||||
|
id: 'current_user_id',
|
||||||
|
username: 'current_user',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
TestHelper.tearDown();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('batchFetchStatusesProfilesGroupsFromPosts with empty posts', async () => {
|
||||||
|
const {data} = await store.dispatch(Actions.batchFetchStatusesProfilesGroupsFromPosts([]));
|
||||||
|
expect(data).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('batchFetchStatusesProfilesGroupsFromPosts with posts', async () => {
|
||||||
|
const post1 = TestHelper.getPostMock({
|
||||||
|
id: 'post1',
|
||||||
|
user_id: 'user1',
|
||||||
|
message: 'test',
|
||||||
|
});
|
||||||
|
const post2 = TestHelper.getPostMock({
|
||||||
|
id: 'post2',
|
||||||
|
user_id: 'user2',
|
||||||
|
message: '@user3 test',
|
||||||
|
});
|
||||||
|
const posts = [post1, post2];
|
||||||
|
|
||||||
|
const usernameMock = nock(Client4.getBaseRoute()).
|
||||||
|
post('/users/usernames').
|
||||||
|
reply(200, [{id: 'user3', username: 'user3'}]);
|
||||||
|
|
||||||
|
const {data} = await store.dispatch(Actions.batchFetchStatusesProfilesGroupsFromPosts(posts));
|
||||||
|
expect(data).toBe(true);
|
||||||
|
await waitFor(() => expect(usernameMock.isDone()).toBe(true));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('batchFetchStatusesProfilesGroupsFromPosts with post metadata', async () => {
|
||||||
|
const post = TestHelper.getPostMock({
|
||||||
|
id: 'post1',
|
||||||
|
user_id: 'user1',
|
||||||
|
message: 'test',
|
||||||
|
metadata: {
|
||||||
|
embeds: [{
|
||||||
|
type: 'opengraph',
|
||||||
|
url: 'https://example.com/image.png',
|
||||||
|
}],
|
||||||
|
} as PostMetadata,
|
||||||
|
});
|
||||||
|
const posts = [post];
|
||||||
|
|
||||||
|
const {data} = await store.dispatch(Actions.batchFetchStatusesProfilesGroupsFromPosts(posts));
|
||||||
|
expect(data).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('getUsersFromMentionedUsernamesAndGroups', async () => {
|
||||||
|
const usernamesAndGroups = ['user1', 'group1'];
|
||||||
|
|
||||||
|
const usernameMock = nock(Client4.getBaseRoute()).
|
||||||
|
post('/users/usernames').
|
||||||
|
reply(200, [{id: 'user1', username: 'user1'}]);
|
||||||
|
|
||||||
|
const groupMock = nock(Client4.getBaseRoute()).
|
||||||
|
get('/groups').
|
||||||
|
query(true).
|
||||||
|
reply(200, [{id: 'group1', name: 'group1'}]);
|
||||||
|
|
||||||
|
const {data} = await store.dispatch(Actions.getUsersFromMentionedUsernamesAndGroups(usernamesAndGroups, true));
|
||||||
|
await waitFor(() => expect(usernameMock.isDone()).toBe(true));
|
||||||
|
await waitFor(() => expect(groupMock.isDone()).toBe(true));
|
||||||
|
expect(data).toEqual(['group1']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('getUsersFromMentionedUsernamesAndGroups without license', async () => {
|
||||||
|
const usernamesAndGroups = ['user1', 'group1'];
|
||||||
|
|
||||||
|
const usernameMock = nock(Client4.getBaseRoute()).
|
||||||
|
post('/users/usernames').
|
||||||
|
reply(200, [{id: 'user1', username: 'user1'}]);
|
||||||
|
|
||||||
|
const groupMock = nock(Client4.getBaseRoute()).
|
||||||
|
get('/groups').
|
||||||
|
query(true).
|
||||||
|
reply(200, [{id: 'group1', name: 'group1'}]);
|
||||||
|
|
||||||
|
const {data} = await store.dispatch(Actions.getUsersFromMentionedUsernamesAndGroups(usernamesAndGroups, false));
|
||||||
|
await waitFor(() => expect(usernameMock.isDone()).toBe(true));
|
||||||
|
await waitFor(() => expect(groupMock.isDone()).toBe(false));
|
||||||
|
expect(data).toEqual(['group1']);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -15,7 +15,7 @@ import {
|
|||||||
maxUserIdsPerStatusesRequest,
|
maxUserIdsPerStatusesRequest,
|
||||||
} from 'mattermost-redux/actions/users';
|
} from 'mattermost-redux/actions/users';
|
||||||
import {getCurrentUser, getCurrentUserId, getIsUserStatusesConfigEnabled, getUsers} from 'mattermost-redux/selectors/entities/common';
|
import {getCurrentUser, getCurrentUserId, getIsUserStatusesConfigEnabled, getUsers} from 'mattermost-redux/selectors/entities/common';
|
||||||
import {getUsersStatusAndProfileFetchingPollInterval} from 'mattermost-redux/selectors/entities/general';
|
import {getLicense, getUsersStatusAndProfileFetchingPollInterval} from 'mattermost-redux/selectors/entities/general';
|
||||||
import {getUserStatuses} from 'mattermost-redux/selectors/entities/users';
|
import {getUserStatuses} from 'mattermost-redux/selectors/entities/users';
|
||||||
import type {ActionFunc, ActionFuncAsync, ThunkActionFunc} from 'mattermost-redux/types/actions';
|
import type {ActionFunc, ActionFuncAsync, ThunkActionFunc} from 'mattermost-redux/types/actions';
|
||||||
import {BackgroundDataLoader} from 'mattermost-redux/utils/data_loader';
|
import {BackgroundDataLoader} from 'mattermost-redux/utils/data_loader';
|
||||||
@@ -172,14 +172,14 @@ export function batchFetchStatusesProfilesGroupsFromPosts(postsArrayOrMap: Post[
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (mentionedUsernamesAndGroupsInPosts.size > 0) {
|
if (mentionedUsernamesAndGroupsInPosts.size > 0) {
|
||||||
dispatch(getUsersFromMentionedUsernamesAndGroups(Array.from(mentionedUsernamesAndGroupsInPosts)));
|
dispatch(getUsersFromMentionedUsernamesAndGroups(Array.from(mentionedUsernamesAndGroupsInPosts), getLicense(state).IsLicensed === 'true'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {data: true};
|
return {data: true};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUsersFromMentionedUsernamesAndGroups(usernamesAndGroups: string[]): ActionFuncAsync<string[]> {
|
export function getUsersFromMentionedUsernamesAndGroups(usernamesAndGroups: string[], isLicensed: boolean): ActionFuncAsync<string[]> {
|
||||||
return async (dispatch) => {
|
return async (dispatch) => {
|
||||||
// We run the at-mentioned be it user or group through the user profile search
|
// We run the at-mentioned be it user or group through the user profile search
|
||||||
const {data: userProfiles} = await dispatch(getProfilesByUsernames(usernamesAndGroups));
|
const {data: userProfiles} = await dispatch(getProfilesByUsernames(usernamesAndGroups));
|
||||||
@@ -198,15 +198,17 @@ export function getUsersFromMentionedUsernamesAndGroups(usernamesAndGroups: stri
|
|||||||
// Removing usernames from the list will leave only the group names
|
// Removing usernames from the list will leave only the group names
|
||||||
const mentionedGroups = usernamesAndGroups.filter((name) => !mentionedUsernames.includes(name));
|
const mentionedGroups = usernamesAndGroups.filter((name) => !mentionedUsernames.includes(name));
|
||||||
|
|
||||||
for (const group of mentionedGroups) {
|
if (isLicensed) {
|
||||||
const groupSearchParam: GroupSearchParams = {
|
for (const group of mentionedGroups) {
|
||||||
q: group,
|
const groupSearchParam: GroupSearchParams = {
|
||||||
filter_allow_reference: true,
|
q: group,
|
||||||
page: 0,
|
filter_allow_reference: true,
|
||||||
per_page: 60,
|
page: 0,
|
||||||
};
|
per_page: 60,
|
||||||
|
};
|
||||||
|
|
||||||
dispatch(searchGroups(groupSearchParam));
|
dispatch(searchGroups(groupSearchParam));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {data: mentionedGroups};
|
return {data: mentionedGroups};
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user