mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-05-27 07:36:34 +00:00
Added unit tests for settings business logic elements
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import { handleActions } from 'redux-actions';
|
import { handleActions } from 'redux-actions';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
const LOAD_REAL_TIME_UPDATES = 'shlink/realTimeUpdates/LOAD_REAL_TIME_UPDATES';
|
export const LOAD_REAL_TIME_UPDATES = 'shlink/realTimeUpdates/LOAD_REAL_TIME_UPDATES';
|
||||||
|
|
||||||
export const RealTimeUpdatesType = PropTypes.shape({
|
export const RealTimeUpdatesType = PropTypes.shape({
|
||||||
enabled: PropTypes.bool.isRequired,
|
enabled: PropTypes.bool.isRequired,
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ import reducer, {
|
|||||||
deleteServer,
|
deleteServer,
|
||||||
listServers,
|
listServers,
|
||||||
createServers,
|
createServers,
|
||||||
FETCH_SERVERS, FETCH_SERVERS_START, editServer,
|
editServer,
|
||||||
|
FETCH_SERVERS,
|
||||||
|
FETCH_SERVERS_START,
|
||||||
} from '../../../src/servers/reducers/server';
|
} from '../../../src/servers/reducers/server';
|
||||||
|
|
||||||
describe('serverReducer', () => {
|
describe('serverReducer', () => {
|
||||||
|
|||||||
47
test/settings/reducers/realTimeUpdates.test.js
Normal file
47
test/settings/reducers/realTimeUpdates.test.js
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import reducer, {
|
||||||
|
LOAD_REAL_TIME_UPDATES,
|
||||||
|
loadRealTimeUpdates,
|
||||||
|
setRealTimeUpdates,
|
||||||
|
} from '../../../src/settings/reducers/realTimeUpdates';
|
||||||
|
|
||||||
|
describe('realTimeUpdatesReducer', () => {
|
||||||
|
const SettingsServiceMock = {
|
||||||
|
updateSettings: jest.fn(),
|
||||||
|
loadSettings: jest.fn(),
|
||||||
|
};
|
||||||
|
|
||||||
|
afterEach(jest.clearAllMocks);
|
||||||
|
|
||||||
|
describe('reducer', () => {
|
||||||
|
it('returns realTimeUpdates when action is LOAD_REAL_TIME_UPDATES', () => {
|
||||||
|
expect(reducer({}, { type: LOAD_REAL_TIME_UPDATES, enabled: true })).toEqual({ enabled: true });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('loadRealTimeUpdates', () => {
|
||||||
|
it.each([
|
||||||
|
[{}, true ],
|
||||||
|
[{ realTimeUpdates: {} }, true ],
|
||||||
|
[{ realTimeUpdates: { enabled: true } }, true ],
|
||||||
|
[{ realTimeUpdates: { enabled: false } }, false ],
|
||||||
|
])('loads settings and returns LOAD_REAL_TIME_UPDATES action', (loadedSettings, expectedEnabled) => {
|
||||||
|
SettingsServiceMock.loadSettings.mockReturnValue(loadedSettings);
|
||||||
|
|
||||||
|
const result = loadRealTimeUpdates(SettingsServiceMock)();
|
||||||
|
|
||||||
|
expect(result).toEqual({ type: LOAD_REAL_TIME_UPDATES, enabled: expectedEnabled });
|
||||||
|
expect(SettingsServiceMock.loadSettings).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('setRealTimeUpdates', () => {
|
||||||
|
it.each([[ true ], [ false ]])('updates settings with provided value and then loads updates again', (enabled) => {
|
||||||
|
const loadRealTimeUpdatesAction = jest.fn();
|
||||||
|
|
||||||
|
setRealTimeUpdates(SettingsServiceMock, loadRealTimeUpdatesAction)(enabled);
|
||||||
|
|
||||||
|
expect(SettingsServiceMock.updateSettings).toHaveBeenCalledWith({ realTimeUpdates: { enabled } });
|
||||||
|
expect(loadRealTimeUpdatesAction).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
46
test/settings/services/SettingsService.test.js
Normal file
46
test/settings/services/SettingsService.test.js
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import SettingsService from '../../../src/settings/services/SettingsService';
|
||||||
|
|
||||||
|
describe('SettingsService', () => {
|
||||||
|
const settings = { foo: 'bar' };
|
||||||
|
const createService = (withSettings = true) => {
|
||||||
|
const storageMock = {
|
||||||
|
set: jest.fn(),
|
||||||
|
get: jest.fn(() => withSettings ? settings : undefined),
|
||||||
|
};
|
||||||
|
const service = new SettingsService(storageMock);
|
||||||
|
|
||||||
|
return [ service, storageMock ];
|
||||||
|
};
|
||||||
|
|
||||||
|
afterEach(jest.resetAllMocks);
|
||||||
|
|
||||||
|
describe('loadSettings', () => {
|
||||||
|
it.each([
|
||||||
|
[ false, {}],
|
||||||
|
[ true, settings ],
|
||||||
|
])('returns result if found in storage', (withSettings, expectedResult) => {
|
||||||
|
const [ service, storageMock ] = createService(withSettings);
|
||||||
|
|
||||||
|
const result = service.loadSettings();
|
||||||
|
|
||||||
|
expect(result).toEqual(expectedResult);
|
||||||
|
expect(storageMock.get).toHaveBeenCalledTimes(1);
|
||||||
|
expect(storageMock.set).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('updateSettings', () => {
|
||||||
|
it.each([
|
||||||
|
[ false, { hi: 'goodbye' }, { hi: 'goodbye' }],
|
||||||
|
[ true, { hi: 'goodbye' }, { foo: 'bar', hi: 'goodbye' }],
|
||||||
|
[ true, { foo: 'goodbye' }, { foo: 'goodbye' }],
|
||||||
|
])('appends provided data to existing settings', (withSettings, settingsToUpdate, expectedResult) => {
|
||||||
|
const [ service, storageMock ] = createService(withSettings);
|
||||||
|
|
||||||
|
service.updateSettings(settingsToUpdate);
|
||||||
|
|
||||||
|
expect(storageMock.get).toHaveBeenCalledTimes(1);
|
||||||
|
expect(storageMock.set).toHaveBeenCalledWith(expect.anything(), expectedResult);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user