mattermost-mobile/app/actions/local/group.test.ts

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);
});
});