2021-10-22 21:13:23 +03:00
|
|
|
import { dissoc, values } from 'ramda';
|
2020-08-23 11:20:31 +03:00
|
|
|
import { Mock } from 'ts-mockery';
|
2018-08-26 11:52:45 +03:00
|
|
|
import reducer, {
|
2018-12-18 21:45:09 +03:00
|
|
|
deleteServer,
|
|
|
|
createServers,
|
2020-04-25 11:22:17 +03:00
|
|
|
editServer,
|
2021-10-22 21:13:23 +03:00
|
|
|
setAutoConnect,
|
2020-04-27 12:30:51 +03:00
|
|
|
EDIT_SERVER,
|
|
|
|
DELETE_SERVER,
|
|
|
|
CREATE_SERVERS,
|
2021-10-22 21:13:23 +03:00
|
|
|
SET_AUTO_CONNECT,
|
2020-04-27 11:52:19 +03:00
|
|
|
} from '../../../src/servers/reducers/servers';
|
2020-08-23 11:20:31 +03:00
|
|
|
import { RegularServer } from '../../../src/servers/data';
|
2018-08-12 11:17:13 +03:00
|
|
|
|
2022-11-05 11:24:12 +03:00
|
|
|
describe('serversReducer', () => {
|
2019-04-28 13:40:50 +03:00
|
|
|
const list = {
|
2020-08-23 11:20:31 +03:00
|
|
|
abc123: Mock.of<RegularServer>({ id: 'abc123' }),
|
|
|
|
def456: Mock.of<RegularServer>({ id: 'def456' }),
|
2018-08-12 11:17:13 +03:00
|
|
|
};
|
|
|
|
|
2019-10-21 20:26:09 +03:00
|
|
|
afterEach(jest.clearAllMocks);
|
|
|
|
|
2018-08-26 11:52:45 +03:00
|
|
|
describe('reducer', () => {
|
2020-04-27 12:30:51 +03:00
|
|
|
it('returns edited server when action is EDIT_SERVER', () =>
|
2022-11-05 11:24:12 +03:00
|
|
|
expect(reducer(list, {
|
|
|
|
type: EDIT_SERVER,
|
|
|
|
payload: { serverId: 'abc123', serverData: { foo: 'foo' } },
|
|
|
|
} as any)).toEqual({
|
2020-04-27 12:30:51 +03:00
|
|
|
abc123: { id: 'abc123', foo: 'foo' },
|
|
|
|
def456: { id: 'def456' },
|
|
|
|
}));
|
|
|
|
|
2021-10-22 21:13:23 +03:00
|
|
|
it('returns as it is when action is EDIT_SERVER and server does not exist', () =>
|
2022-11-05 11:24:12 +03:00
|
|
|
expect(reducer(list, {
|
|
|
|
type: EDIT_SERVER,
|
|
|
|
payload: { serverId: 'invalid', serverData: { foo: 'foo' } },
|
|
|
|
} as any)).toEqual({
|
2021-10-22 21:13:23 +03:00
|
|
|
abc123: { id: 'abc123' },
|
|
|
|
def456: { id: 'def456' },
|
|
|
|
}));
|
|
|
|
|
2020-04-27 12:30:51 +03:00
|
|
|
it('removes server when action is DELETE_SERVER', () =>
|
2022-11-05 11:24:12 +03:00
|
|
|
expect(reducer(list, {
|
|
|
|
type: DELETE_SERVER,
|
|
|
|
payload: { serverId: 'abc123' },
|
|
|
|
} as any)).toEqual({
|
2020-04-27 12:30:51 +03:00
|
|
|
def456: { id: 'def456' },
|
|
|
|
}));
|
|
|
|
|
|
|
|
it('appends server when action is CREATE_SERVERS', () =>
|
|
|
|
expect(reducer(list, {
|
|
|
|
type: CREATE_SERVERS,
|
2022-11-05 11:24:12 +03:00
|
|
|
payload: {
|
2020-04-27 12:30:51 +03:00
|
|
|
ghi789: { id: 'ghi789' },
|
|
|
|
},
|
2020-08-23 11:20:31 +03:00
|
|
|
} as any)).toEqual({
|
2020-04-27 12:30:51 +03:00
|
|
|
abc123: { id: 'abc123' },
|
|
|
|
def456: { id: 'def456' },
|
|
|
|
ghi789: { id: 'ghi789' },
|
|
|
|
}));
|
2021-10-22 21:13:23 +03:00
|
|
|
|
|
|
|
it.each([
|
2022-03-26 14:17:42 +03:00
|
|
|
[true],
|
|
|
|
[false],
|
2021-10-22 21:13:23 +03:00
|
|
|
])('returns state as it is when trying to set auto-connect on invalid server', (autoConnect) =>
|
|
|
|
expect(reducer(list, {
|
|
|
|
type: SET_AUTO_CONNECT,
|
2022-11-05 11:24:12 +03:00
|
|
|
payload: { serverId: 'invalid', autoConnect },
|
2021-10-22 21:13:23 +03:00
|
|
|
} as any)).toEqual({
|
|
|
|
abc123: { id: 'abc123' },
|
|
|
|
def456: { id: 'def456' },
|
|
|
|
}));
|
|
|
|
|
|
|
|
it('disables auto-connect on a server which is already set to auto-connect', () => {
|
|
|
|
const listWithDisabledAutoConnect = {
|
|
|
|
...list,
|
|
|
|
abc123: { ...list.abc123, autoConnect: true },
|
|
|
|
};
|
|
|
|
|
|
|
|
expect(reducer(listWithDisabledAutoConnect, {
|
|
|
|
type: SET_AUTO_CONNECT,
|
2022-11-05 11:24:12 +03:00
|
|
|
payload: { serverId: 'abc123', autoConnect: false },
|
2021-10-22 21:13:23 +03:00
|
|
|
} as any)).toEqual({
|
|
|
|
abc123: { id: 'abc123', autoConnect: false },
|
|
|
|
def456: { id: 'def456' },
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('disables auto-connect on all servers except selected one', () => {
|
|
|
|
const listWithEnabledAutoConnect = {
|
|
|
|
...list,
|
|
|
|
abc123: { ...list.abc123, autoConnect: true },
|
|
|
|
};
|
|
|
|
|
|
|
|
expect(reducer(listWithEnabledAutoConnect, {
|
|
|
|
type: SET_AUTO_CONNECT,
|
2022-11-05 11:24:12 +03:00
|
|
|
payload: { serverId: 'def456', autoConnect: true },
|
2021-10-22 21:13:23 +03:00
|
|
|
} as any)).toEqual({
|
|
|
|
abc123: { id: 'abc123', autoConnect: false },
|
|
|
|
def456: { id: 'def456', autoConnect: true },
|
|
|
|
});
|
|
|
|
});
|
2018-08-12 11:17:13 +03:00
|
|
|
});
|
|
|
|
|
|
|
|
describe('action creators', () => {
|
2020-03-15 13:29:20 +03:00
|
|
|
describe('editServer', () => {
|
2020-04-27 12:30:51 +03:00
|
|
|
it('returns expected action', () => {
|
|
|
|
const serverData = { name: 'edited' };
|
|
|
|
const result = editServer('123', serverData);
|
2020-03-15 13:29:20 +03:00
|
|
|
|
2022-11-05 11:24:12 +03:00
|
|
|
expect(result).toEqual({
|
|
|
|
type: EDIT_SERVER,
|
|
|
|
payload: { serverId: '123', serverData },
|
|
|
|
});
|
2018-08-12 11:17:13 +03:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('deleteServer', () => {
|
2020-04-27 12:30:51 +03:00
|
|
|
it('returns expected action', () => {
|
2020-08-23 11:20:31 +03:00
|
|
|
const serverToDelete = Mock.of<RegularServer>({ id: 'abc123' });
|
2020-04-27 12:30:51 +03:00
|
|
|
const result = deleteServer(serverToDelete);
|
2018-08-12 11:17:13 +03:00
|
|
|
|
2022-11-05 11:24:12 +03:00
|
|
|
expect(result).toEqual({
|
|
|
|
type: DELETE_SERVER,
|
|
|
|
payload: { serverId: 'abc123' },
|
|
|
|
});
|
2018-08-12 11:17:13 +03:00
|
|
|
});
|
|
|
|
});
|
2018-08-23 17:35:27 +03:00
|
|
|
|
2020-03-15 13:29:20 +03:00
|
|
|
describe('createServers', () => {
|
2020-04-27 12:30:51 +03:00
|
|
|
it('returns expected action', () => {
|
|
|
|
const newServers = values(list);
|
|
|
|
const result = createServers(newServers);
|
2018-08-23 17:35:27 +03:00
|
|
|
|
2020-04-27 12:30:51 +03:00
|
|
|
expect(result).toEqual(expect.objectContaining({ type: CREATE_SERVERS }));
|
2018-08-23 17:35:27 +03:00
|
|
|
});
|
2021-10-22 21:13:23 +03:00
|
|
|
|
|
|
|
it('generates an id for every provided server if they do not have it', () => {
|
|
|
|
const servers = values(list).map(dissoc('id'));
|
2022-11-05 11:24:12 +03:00
|
|
|
const { payload } = createServers(servers);
|
2021-10-22 21:13:23 +03:00
|
|
|
|
2022-11-05 11:24:12 +03:00
|
|
|
expect(values(payload).every(({ id }) => !!id)).toEqual(true);
|
2021-10-22 21:13:23 +03:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('setAutoConnect', () => {
|
|
|
|
it.each([
|
2022-03-26 14:17:42 +03:00
|
|
|
[true],
|
|
|
|
[false],
|
2021-10-22 21:13:23 +03:00
|
|
|
])('returns expected action', (autoConnect) => {
|
|
|
|
const serverToEdit = Mock.of<RegularServer>({ id: 'abc123' });
|
|
|
|
const result = setAutoConnect(serverToEdit, autoConnect);
|
|
|
|
|
2022-11-05 11:24:12 +03:00
|
|
|
expect(result).toEqual({
|
|
|
|
type: SET_AUTO_CONNECT,
|
|
|
|
payload: { serverId: 'abc123', autoConnect },
|
|
|
|
});
|
2021-10-22 21:13:23 +03:00
|
|
|
});
|
2018-08-23 17:35:27 +03:00
|
|
|
});
|
2018-08-12 11:17:13 +03:00
|
|
|
});
|
|
|
|
});
|