150 lines
5.8 KiB
TypeScript
150 lines
5.8 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import * as remoteGroups from '@actions/remote/groups';
|
|
import DatabaseManager from '@database/manager';
|
|
|
|
import {
|
|
searchGroupsByName,
|
|
searchGroupsByNameInTeam,
|
|
searchGroupsByNameInChannel,
|
|
} from './group';
|
|
|
|
import type ServerDataOperator from '@database/operator/server_data_operator';
|
|
|
|
jest.mock('@actions/remote/groups');
|
|
|
|
const mockedRemoteGroups = jest.mocked(remoteGroups);
|
|
|
|
describe('searchGroups', () => {
|
|
let operator: ServerDataOperator;
|
|
const serverUrl = 'baseHandler.test.com';
|
|
const teamId = 'teamid1';
|
|
const channelId = 'channelid1';
|
|
const group: Group = {
|
|
id: 'kjlw9j1ttnxwig7tnqgebg7dtipno',
|
|
name: 'groupname',
|
|
display_name: 'Test',
|
|
source: 'custom',
|
|
remote_id: 'iuh4r89egnslnvakjsdjhg',
|
|
description: 'Test description',
|
|
member_count: 0,
|
|
allow_reference: true,
|
|
create_at: 0,
|
|
update_at: 0,
|
|
delete_at: 0,
|
|
} as Group;
|
|
|
|
beforeEach(async () => {
|
|
await DatabaseManager.init([serverUrl]);
|
|
operator = DatabaseManager.serverDatabases[serverUrl]!.operator;
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await DatabaseManager.destroyServerDatabase(serverUrl);
|
|
});
|
|
|
|
it('searchGroupsByName - handle not found database', async () => {
|
|
const models = await searchGroupsByName('foo', 'test');
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(0);
|
|
});
|
|
|
|
it('searchGroupsByName - no groups', async () => {
|
|
const models = await searchGroupsByName(serverUrl, 'test');
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(0);
|
|
});
|
|
|
|
it('searchGroupsByName - fetch failed', async () => {
|
|
await operator.handleGroups({groups: [group], prepareRecordsOnly: false});
|
|
mockedRemoteGroups.fetchGroupsForAutocomplete.mockReturnValueOnce(Promise.reject(new Error('fail')));
|
|
|
|
const models = await searchGroupsByName(serverUrl, group.name);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(1);
|
|
expect(models[0].id).toBe(group.id);
|
|
});
|
|
|
|
it('searchGroupsByName', async () => {
|
|
const groupModels = await operator.handleGroups({groups: [group], prepareRecordsOnly: false});
|
|
mockedRemoteGroups.fetchGroupsForAutocomplete.mockReturnValueOnce(Promise.resolve(groupModels));
|
|
|
|
const models = await searchGroupsByName(serverUrl, group.name);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(1);
|
|
expect(models[0].id).toBe(group.id);
|
|
});
|
|
|
|
it('searchGroupsByNameInTeam - handle not found database', async () => {
|
|
const models = await searchGroupsByNameInTeam('foo', 'test', teamId);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(0);
|
|
});
|
|
|
|
it('searchGroupsByNameInTeam - no groups', async () => {
|
|
const models = await searchGroupsByNameInTeam(serverUrl, 'test', teamId);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(0);
|
|
});
|
|
|
|
it('searchGroupsByNameInTeam - fetch failed', async () => {
|
|
await operator.handleGroups({groups: [group], prepareRecordsOnly: false});
|
|
await operator.handleGroupTeamsForTeam({groups: [group], teamId, prepareRecordsOnly: false});
|
|
|
|
mockedRemoteGroups.fetchFilteredTeamGroups.mockReturnValueOnce(Promise.reject(new Error('fail')));
|
|
|
|
const models = await searchGroupsByNameInTeam(serverUrl, group.name, teamId);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(1);
|
|
expect(models[0].id).toBe(group.id);
|
|
});
|
|
|
|
it('searchGroupsByNameInTeam', async () => {
|
|
const groupModels = await operator.handleGroups({groups: [group], prepareRecordsOnly: false});
|
|
await operator.handleGroupTeamsForTeam({groups: [group], teamId, prepareRecordsOnly: false});
|
|
|
|
mockedRemoteGroups.fetchFilteredTeamGroups.mockReturnValueOnce(Promise.resolve(groupModels));
|
|
|
|
const models = await searchGroupsByNameInTeam(serverUrl, group.name, teamId);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(1);
|
|
expect(models[0].id).toBe(group.id);
|
|
});
|
|
|
|
it('searchGroupsByNameInChannel - handle not found database', async () => {
|
|
const models = await searchGroupsByNameInChannel('foo', 'test', channelId);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(0);
|
|
});
|
|
|
|
it('searchGroupsByNameInChannel - no groups', async () => {
|
|
const models = await searchGroupsByNameInChannel(serverUrl, 'test', channelId);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(0);
|
|
});
|
|
|
|
it('searchGroupsByNameInChannel - fetch failed', async () => {
|
|
await operator.handleGroups({groups: [group], prepareRecordsOnly: false});
|
|
await operator.handleGroupChannelsForChannel({groups: [group], channelId, prepareRecordsOnly: false});
|
|
|
|
mockedRemoteGroups.fetchFilteredChannelGroups.mockReturnValueOnce(Promise.reject(new Error('fail')));
|
|
|
|
const models = await searchGroupsByNameInChannel(serverUrl, group.name, channelId);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(1);
|
|
expect(models[0].id).toBe(group.id);
|
|
});
|
|
|
|
it('searchGroupsByNameInChannel', async () => {
|
|
const groupModels = await operator.handleGroups({groups: [group], prepareRecordsOnly: false});
|
|
await operator.handleGroupChannelsForChannel({groups: [group], channelId, prepareRecordsOnly: false});
|
|
|
|
mockedRemoteGroups.fetchFilteredChannelGroups.mockReturnValueOnce(Promise.resolve(groupModels));
|
|
|
|
const models = await searchGroupsByNameInChannel(serverUrl, group.name, channelId);
|
|
expect(models).toBeDefined();
|
|
expect(models.length).toBe(1);
|
|
expect(models[0].id).toBe(group.id);
|
|
});
|
|
});
|