183 lines
7.7 KiB
JavaScript
183 lines
7.7 KiB
JavaScript
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {TAB_MESSAGING, TAB_FOCALBOARD, TAB_PLAYBOOKS} from 'common/views/View';
|
|
import {parseURL, isInternalURL} from 'common/utils/url';
|
|
import Utils from 'common/utils/util';
|
|
|
|
import {ServerManager} from './serverManager';
|
|
|
|
jest.mock('common/config', () => ({
|
|
set: jest.fn(),
|
|
}));
|
|
jest.mock('common/utils/url', () => ({
|
|
parseURL: jest.fn(),
|
|
isInternalURL: jest.fn(),
|
|
getFormattedPathName: (pathname) => (pathname.length ? pathname : '/'),
|
|
}));
|
|
jest.mock('common/utils/util', () => ({
|
|
isVersionGreaterThanOrEqualTo: jest.fn(),
|
|
}));
|
|
jest.mock('main/server/serverInfo', () => ({
|
|
ServerInfo: jest.fn(),
|
|
}));
|
|
|
|
describe('common/servers/serverManager', () => {
|
|
describe('updateRemoteInfos', () => {
|
|
const serverManager = new ServerManager();
|
|
|
|
beforeEach(() => {
|
|
const server = {id: 'server-1', url: new URL('http://server-1.com'), name: 'server-1'};
|
|
server.updateURL = (url) => {
|
|
server.url = new URL(url);
|
|
};
|
|
serverManager.servers = new Map([['server-1', server]]);
|
|
serverManager.views = new Map([
|
|
['view-1', {id: 'view-1', type: TAB_MESSAGING, isOpen: true, server}],
|
|
['view-2', {id: 'view-2', type: TAB_PLAYBOOKS, server}],
|
|
['view-3', {id: 'view-3', type: TAB_FOCALBOARD, server}],
|
|
]);
|
|
serverManager.viewOrder = new Map([['server-1', ['view-1', 'view-2', 'view-3']]]);
|
|
serverManager.persistServers = jest.fn();
|
|
Utils.isVersionGreaterThanOrEqualTo.mockImplementation((version) => version === '6.0.0');
|
|
});
|
|
|
|
it('should not save when there is nothing to update', () => {
|
|
serverManager.updateRemoteInfos(new Map([['server-1', {
|
|
siteURL: 'http://server-1.com',
|
|
serverVersion: '6.0.0',
|
|
hasPlaybooks: false,
|
|
hasFocalboard: false,
|
|
}]]));
|
|
|
|
expect(serverManager.persistServers).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('should open all views', async () => {
|
|
serverManager.updateRemoteInfos(new Map([['server-1', {
|
|
siteURL: 'http://server-1.com',
|
|
serverVersion: '6.0.0',
|
|
hasPlaybooks: true,
|
|
hasFocalboard: true,
|
|
}]]));
|
|
|
|
expect(serverManager.views.get('view-2').isOpen).toBe(true);
|
|
expect(serverManager.views.get('view-3').isOpen).toBe(true);
|
|
});
|
|
|
|
it('should open only playbooks', async () => {
|
|
serverManager.updateRemoteInfos(new Map([['server-1', {
|
|
siteURL: 'http://server-1.com',
|
|
serverVersion: '6.0.0',
|
|
hasPlaybooks: true,
|
|
hasFocalboard: false,
|
|
}]]));
|
|
|
|
expect(serverManager.views.get('view-2').isOpen).toBe(true);
|
|
expect(serverManager.views.get('view-3').isOpen).toBeUndefined();
|
|
});
|
|
|
|
it('should open none when server version is too old', async () => {
|
|
serverManager.updateRemoteInfos(new Map([['server-1', {
|
|
siteURL: 'http://server-1.com',
|
|
serverVersion: '5.0.0',
|
|
hasPlaybooks: true,
|
|
hasFocalboard: true,
|
|
}]]));
|
|
|
|
expect(serverManager.views.get('view-2').isOpen).toBeUndefined();
|
|
expect(serverManager.views.get('view-3').isOpen).toBeUndefined();
|
|
});
|
|
|
|
it('should update server URL using site URL', async () => {
|
|
serverManager.updateRemoteInfos(new Map([['server-1', {
|
|
siteURL: 'http://server-2.com',
|
|
serverVersion: '6.0.0',
|
|
hasPlaybooks: true,
|
|
hasFocalboard: true,
|
|
}]]));
|
|
|
|
expect(serverManager.servers.get('server-1').url.toString()).toBe('http://server-2.com/');
|
|
});
|
|
});
|
|
|
|
describe('lookupViewByURL', () => {
|
|
const serverManager = new ServerManager();
|
|
serverManager.getAllServers = () => [
|
|
{id: 'server-1', url: new URL('http://server-1.com')},
|
|
{id: 'server-2', url: new URL('http://server-2.com/subpath')},
|
|
];
|
|
serverManager.getOrderedTabsForServer = (serverId) => {
|
|
if (serverId === 'server-1') {
|
|
return [
|
|
{id: 'view-1', url: new URL('http://server-1.com')},
|
|
{id: 'view-1-type-1', url: new URL('http://server-1.com/type1')},
|
|
{id: 'view-1-type-2', url: new URL('http://server-1.com/type2')},
|
|
];
|
|
}
|
|
if (serverId === 'server-2') {
|
|
return [
|
|
{id: 'view-2', url: new URL('http://server-2.com/subpath')},
|
|
{id: 'view-2-type-1', url: new URL('http://server-2.com/subpath/type1')},
|
|
{id: 'view-2-type-2', url: new URL('http://server-2.com/subpath/type2')},
|
|
];
|
|
}
|
|
return [];
|
|
};
|
|
|
|
beforeEach(() => {
|
|
parseURL.mockImplementation((url) => new URL(url));
|
|
isInternalURL.mockImplementation((url1, url2) => `${url1}`.startsWith(`${url2}`));
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.resetAllMocks();
|
|
});
|
|
|
|
it('should match the correct server - base URL', () => {
|
|
const inputURL = new URL('http://server-1.com');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toStrictEqual({id: 'view-1', url: new URL('http://server-1.com')});
|
|
});
|
|
|
|
it('should match the correct server - base view', () => {
|
|
const inputURL = new URL('http://server-1.com/server');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toStrictEqual({id: 'view-1', url: new URL('http://server-1.com')});
|
|
});
|
|
|
|
it('should match the correct server - different view', () => {
|
|
const inputURL = new URL('http://server-1.com/type1/app');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toStrictEqual({id: 'view-1-type-1', url: new URL('http://server-1.com/type1')});
|
|
});
|
|
|
|
it('should return undefined for server with subpath and URL without', () => {
|
|
const inputURL = new URL('http://server-2.com');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toBe(undefined);
|
|
});
|
|
|
|
it('should return undefined for server with subpath and URL with wrong subpath', () => {
|
|
const inputURL = new URL('http://server-2.com/different/subpath');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toBe(undefined);
|
|
});
|
|
|
|
it('should match the correct server with a subpath - base URL', () => {
|
|
const inputURL = new URL('http://server-2.com/subpath');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toStrictEqual({id: 'view-2', url: new URL('http://server-2.com/subpath')});
|
|
});
|
|
|
|
it('should match the correct server with a subpath - base view', () => {
|
|
const inputURL = new URL('http://server-2.com/subpath/server');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toStrictEqual({id: 'view-2', url: new URL('http://server-2.com/subpath')});
|
|
});
|
|
|
|
it('should match the correct server with a subpath - different view', () => {
|
|
const inputURL = new URL('http://server-2.com/subpath/type2/server');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toStrictEqual({id: 'view-2-type-2', url: new URL('http://server-2.com/subpath/type2')});
|
|
});
|
|
|
|
it('should return undefined for wrong server', () => {
|
|
const inputURL = new URL('http://server-3.com');
|
|
expect(serverManager.lookupViewByURL(inputURL)).toBe(undefined);
|
|
});
|
|
});
|
|
});
|