mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2024-12-23 17:40:23 +03:00
Added more tests covering new use cases
This commit is contained in:
parent
91488ae294
commit
ed40b79c8d
4 changed files with 128 additions and 4 deletions
70
test/mercure/mercureInfo.test.js
Normal file
70
test/mercure/mercureInfo.test.js
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
import reducer, {
|
||||||
|
GET_MERCURE_INFO_START,
|
||||||
|
GET_MERCURE_INFO_ERROR,
|
||||||
|
GET_MERCURE_INFO,
|
||||||
|
loadMercureInfo,
|
||||||
|
} from '../../src/mercure/reducers/mercureInfo.js';
|
||||||
|
|
||||||
|
describe('mercureInfoReducer', () => {
|
||||||
|
const mercureInfo = {
|
||||||
|
mercureHubUrl: 'http://example.com/.well-known/mercure',
|
||||||
|
token: 'abc.123.def',
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('reducer', () => {
|
||||||
|
it('returns loading on GET_MERCURE_INFO_START', () => {
|
||||||
|
expect(reducer({}, { type: GET_MERCURE_INFO_START })).toEqual({
|
||||||
|
loading: true,
|
||||||
|
error: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns error on GET_MERCURE_INFO_ERROR', () => {
|
||||||
|
expect(reducer({}, { type: GET_MERCURE_INFO_ERROR })).toEqual({
|
||||||
|
loading: false,
|
||||||
|
error: true,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns mercure info on GET_MERCURE_INFO', () => {
|
||||||
|
expect(reducer({}, { type: GET_MERCURE_INFO, ...mercureInfo })).toEqual({
|
||||||
|
...mercureInfo,
|
||||||
|
loading: false,
|
||||||
|
error: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('loadMercureInfo', () => {
|
||||||
|
const createApiClientMock = (result) => ({
|
||||||
|
mercureInfo: jest.fn(() => result),
|
||||||
|
});
|
||||||
|
const dispatch = jest.fn();
|
||||||
|
const getState = () => ({});
|
||||||
|
|
||||||
|
afterEach(jest.resetAllMocks);
|
||||||
|
|
||||||
|
it('calls API on success', async () => {
|
||||||
|
const apiClientMock = createApiClientMock(Promise.resolve(mercureInfo));
|
||||||
|
|
||||||
|
await loadMercureInfo(() => apiClientMock)()(dispatch, getState());
|
||||||
|
|
||||||
|
expect(apiClientMock.mercureInfo).toHaveBeenCalledTimes(1);
|
||||||
|
expect(dispatch).toHaveBeenCalledTimes(2);
|
||||||
|
expect(dispatch).toHaveBeenNthCalledWith(1, { type: GET_MERCURE_INFO_START });
|
||||||
|
expect(dispatch).toHaveBeenNthCalledWith(2, { type: GET_MERCURE_INFO, ...mercureInfo });
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws error on failure', async () => {
|
||||||
|
const error = 'Error';
|
||||||
|
const apiClientMock = createApiClientMock(Promise.reject(error));
|
||||||
|
|
||||||
|
await loadMercureInfo(() => apiClientMock)()(dispatch, getState());
|
||||||
|
|
||||||
|
expect(apiClientMock.mercureInfo).toHaveBeenCalledTimes(1);
|
||||||
|
expect(dispatch).toHaveBeenCalledTimes(2);
|
||||||
|
expect(dispatch).toHaveBeenNthCalledWith(1, { type: GET_MERCURE_INFO_START });
|
||||||
|
expect(dispatch).toHaveBeenNthCalledWith(2, { type: GET_MERCURE_INFO_ERROR });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -52,7 +52,7 @@ describe('shortUrlCreationReducer', () => {
|
||||||
const dispatch = jest.fn();
|
const dispatch = jest.fn();
|
||||||
const getState = () => ({});
|
const getState = () => ({});
|
||||||
|
|
||||||
afterEach(() => dispatch.mockReset());
|
afterEach(jest.resetAllMocks);
|
||||||
|
|
||||||
it('calls API on success', async () => {
|
it('calls API on success', async () => {
|
||||||
const result = 'foo';
|
const result = 'foo';
|
||||||
|
|
|
@ -7,6 +7,7 @@ import reducer, {
|
||||||
import { SHORT_URL_TAGS_EDITED } from '../../../src/short-urls/reducers/shortUrlTags';
|
import { SHORT_URL_TAGS_EDITED } from '../../../src/short-urls/reducers/shortUrlTags';
|
||||||
import { SHORT_URL_DELETED } from '../../../src/short-urls/reducers/shortUrlDeletion';
|
import { SHORT_URL_DELETED } from '../../../src/short-urls/reducers/shortUrlDeletion';
|
||||||
import { SHORT_URL_META_EDITED } from '../../../src/short-urls/reducers/shortUrlMeta';
|
import { SHORT_URL_META_EDITED } from '../../../src/short-urls/reducers/shortUrlMeta';
|
||||||
|
import { CREATE_SHORT_URL_VISIT } from '../../../src/visits/reducers/shortUrlVisits';
|
||||||
|
|
||||||
describe('shortUrlsListReducer', () => {
|
describe('shortUrlsListReducer', () => {
|
||||||
describe('reducer', () => {
|
describe('reducer', () => {
|
||||||
|
@ -31,7 +32,7 @@ describe('shortUrlsListReducer', () => {
|
||||||
error: true,
|
error: true,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('Updates tags on matching URL on SHORT_URL_TAGS_EDITED', () => {
|
it('updates tags on matching URL on SHORT_URL_TAGS_EDITED', () => {
|
||||||
const shortCode = 'abc123';
|
const shortCode = 'abc123';
|
||||||
const tags = [ 'foo', 'bar', 'baz' ];
|
const tags = [ 'foo', 'bar', 'baz' ];
|
||||||
const state = {
|
const state = {
|
||||||
|
@ -55,7 +56,7 @@ describe('shortUrlsListReducer', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Updates meta on matching URL on SHORT_URL_META_EDITED', () => {
|
it('updates meta on matching URL on SHORT_URL_META_EDITED', () => {
|
||||||
const shortCode = 'abc123';
|
const shortCode = 'abc123';
|
||||||
const domain = 'example.com';
|
const domain = 'example.com';
|
||||||
const meta = {
|
const meta = {
|
||||||
|
@ -83,7 +84,7 @@ describe('shortUrlsListReducer', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Removes matching URL on SHORT_URL_DELETED', () => {
|
it('removes matching URL on SHORT_URL_DELETED', () => {
|
||||||
const shortCode = 'abc123';
|
const shortCode = 'abc123';
|
||||||
const state = {
|
const state = {
|
||||||
shortUrls: {
|
shortUrls: {
|
||||||
|
@ -101,6 +102,33 @@ describe('shortUrlsListReducer', () => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('updates visits count on CREATE_SHORT_URL_VISIT', () => {
|
||||||
|
const shortCode = 'abc123';
|
||||||
|
const shortUrl = {
|
||||||
|
shortCode,
|
||||||
|
visitsCount: 11,
|
||||||
|
};
|
||||||
|
const state = {
|
||||||
|
shortUrls: {
|
||||||
|
data: [
|
||||||
|
{ shortCode, domain: 'example.com', visitsCount: 5 },
|
||||||
|
{ shortCode, visitsCount: 10 },
|
||||||
|
{ shortCode: 'foo', visitsCount: 8 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(reducer(state, { type: CREATE_SHORT_URL_VISIT, shortUrl })).toEqual({
|
||||||
|
shortUrls: {
|
||||||
|
data: [
|
||||||
|
{ shortCode, domain: 'example.com', visitsCount: 5 },
|
||||||
|
{ shortCode, visitsCount: 11 },
|
||||||
|
{ shortCode: 'foo', visitsCount: 8 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('listShortUrls', () => {
|
describe('listShortUrls', () => {
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
import reducer, {
|
import reducer, {
|
||||||
getShortUrlVisits,
|
getShortUrlVisits,
|
||||||
cancelGetShortUrlVisits,
|
cancelGetShortUrlVisits,
|
||||||
|
createNewVisit,
|
||||||
GET_SHORT_URL_VISITS_START,
|
GET_SHORT_URL_VISITS_START,
|
||||||
GET_SHORT_URL_VISITS_ERROR,
|
GET_SHORT_URL_VISITS_ERROR,
|
||||||
GET_SHORT_URL_VISITS,
|
GET_SHORT_URL_VISITS,
|
||||||
GET_SHORT_URL_VISITS_LARGE,
|
GET_SHORT_URL_VISITS_LARGE,
|
||||||
GET_SHORT_URL_VISITS_CANCEL,
|
GET_SHORT_URL_VISITS_CANCEL,
|
||||||
|
CREATE_SHORT_URL_VISIT,
|
||||||
} from '../../../src/visits/reducers/shortUrlVisits';
|
} from '../../../src/visits/reducers/shortUrlVisits';
|
||||||
|
|
||||||
describe('shortUrlVisitsReducer', () => {
|
describe('shortUrlVisitsReducer', () => {
|
||||||
|
@ -48,6 +50,23 @@ describe('shortUrlVisitsReducer', () => {
|
||||||
expect(error).toEqual(false);
|
expect(error).toEqual(false);
|
||||||
expect(visits).toEqual(actionVisits);
|
expect(visits).toEqual(actionVisits);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[{ shortCode: 'abc123' }, [{}, {}, {}]],
|
||||||
|
[{ shortCode: 'def456' }, [{}, {}]],
|
||||||
|
])('appends a new visit on CREATE_SHORT_URL_VISIT', (state, expectedVisits) => {
|
||||||
|
const shortUrl = {
|
||||||
|
shortCode: 'abc123',
|
||||||
|
};
|
||||||
|
const prevState = {
|
||||||
|
...state,
|
||||||
|
visits: [{}, {}],
|
||||||
|
};
|
||||||
|
|
||||||
|
const { visits } = reducer(prevState, { type: CREATE_SHORT_URL_VISIT, shortUrl, visit: {} });
|
||||||
|
|
||||||
|
expect(visits).toEqual(expectedVisits);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getShortUrlVisits', () => {
|
describe('getShortUrlVisits', () => {
|
||||||
|
@ -119,4 +138,11 @@ describe('shortUrlVisitsReducer', () => {
|
||||||
it('just returns the action with proper type', () =>
|
it('just returns the action with proper type', () =>
|
||||||
expect(cancelGetShortUrlVisits()).toEqual({ type: GET_SHORT_URL_VISITS_CANCEL }));
|
expect(cancelGetShortUrlVisits()).toEqual({ type: GET_SHORT_URL_VISITS_CANCEL }));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('createNewVisit', () => {
|
||||||
|
it('just returns the action with proper type', () =>
|
||||||
|
expect(createNewVisit({ shortUrl: {}, visit: {} })).toEqual(
|
||||||
|
{ type: CREATE_SHORT_URL_VISIT, shortUrl: {}, visit: {} }
|
||||||
|
));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue