Files
Maagap/ioneapps-maagapp-ee31119a522d/__tests__/reducers/upload.js
2025-08-06 13:49:11 +08:00

224 lines
6.4 KiB
JavaScript

/* global describe: true, test:true, expect:true */
/* eslint-disable max-len */
import { upload as uploadReducer, initialState } from '~/reducers/upload';
import {
UPLOAD_ITEM_STARTED,
UPLOAD_SUCCESS,
UPLOAD_ITEMS,
UPLOAD_ITEMS_STATE_CHANGED,
UPLOAD_ITEMS_ERROR,
} from '~/store/actionTypes';
import {
UPLOAD_STATUS_COMPLETED,
UPLOAD_STATUS_UPLOADING,
UPLOAD_STATUS_ERROR,
} from '~/lib/uploaders/constants';
describe('Upload reducer', () => {
test('CASE 1: should return initial state', () => {
expect(uploadReducer(undefined, { type: 'Default' }))
.toEqual(initialState);
});
test('CASE 2: should return new state with items when type is UPLOAD_ITEMS', () => {
const items = [{ uri: '1.jpg' }, { uri: '2.jpg' }];
const stateResult = uploadReducer(undefined, { type: UPLOAD_ITEMS, payload: { items } });
expect(stateResult).toHaveProperty('items');
expect(stateResult.items).toHaveLength(items.length);
stateResult.items.forEach(item => {
expect(item).toHaveProperty('meta');
});
});
test('CASE 3: should return state with loading when type is UPLOAD_ITEM_STARTED', () => {
const expectedState = { ...initialState, meta: { ...initialState.meta, loading: true } };
expect(uploadReducer(initialState, { type: UPLOAD_ITEM_STARTED })).toEqual(expectedState);
});
test('CASE 4: should return empty items with meta property when type is UPLOAD_SUCCESS', () => {
const expectedState = {
items: [],
meta: {
error: '',
status: UPLOAD_STATUS_COMPLETED,
loading: false,
elapsed: 0,
},
receivers: [],
};
expect(uploadReducer(initialState, { type: UPLOAD_SUCCESS })).toEqual(expectedState);
});
test('CASE 5: should return items with meta property when type is UPLOAD_ITEMS_STATE_CHANGED', () => {
// add pending items
const items = [{ fullFilePath: '1.jpg' }, { fullFilePath: '2.jpg' }];
const item = { fullFilePath: '1.jpg', progress: 1 };
const pendingItemState = uploadReducer(initialState, { type: UPLOAD_ITEMS, payload: { items } });
const stateResult = uploadReducer(
pendingItemState,
{
type: UPLOAD_ITEMS_STATE_CHANGED,
payload: {
item,
elapsed: 1,
},
},
);
const expectedState = {
items: [{
fullFilePath: '1.jpg',
meta: {
progress: 1,
error: '',
status: UPLOAD_STATUS_UPLOADING,
loading: true,
},
}, {
fullFilePath: '2.jpg',
meta: {
progress: 0.0,
error: '',
status: UPLOAD_STATUS_UPLOADING,
loading: true,
},
}],
meta: {
error: '',
status: UPLOAD_STATUS_UPLOADING,
loading: true,
elapsed: 1,
},
};
stateResult.items.forEach(i => {
expect(i).toHaveProperty('meta');
});
expect(stateResult).toEqual(expectedState);
});
test('CASE 6: should return correct state when type is UPLOAD_ITEMS_ERROR', () => {
const items = [{ fullFilePath: '1.jpg' }, { fullFilePath: '2.jpg' }];
const item = { fullFilePath: '1.jpg', error: 'error' };
const pendingItemState = uploadReducer(initialState, { type: UPLOAD_ITEMS, payload: { items } });
const stateResult = uploadReducer(
pendingItemState,
{
type: UPLOAD_ITEMS_ERROR,
payload: {
item,
error: item.error,
},
},
);
const expectedState = {
items: [],
meta: {
error: 'error',
status: UPLOAD_STATUS_ERROR,
loading: false,
elapsed: 0,
},
};
expect(stateResult).toEqual(expectedState);
});
// test('CASE 6: should return state with album loading to TRUE when type is GET_ALBUM_CONTENT', () => {
// const albums = [{ id: 1 }, { id: 2 }];
// const payload = {
// albumId: 1,
// };
// const originalState = { ...initialState, albums, meta: { error: '' } };
// const stateResult = uploadReducer({ ...originalState, albums, meta: { error: '' } }, {
// type: GET_ALBUM_CONTENT,
// payload,
// });
// const expectedState = {
// albums: [{
// id: 1,
// meta: { error: '', loading: true },
// },
// { id: 2 }],
// meta: { error: '' },
// };
// expect(stateResult).toEqual(expectedState);
// });
// test('CASE 7: should return state with album content when type is GET_ALBUM_CONTENT_SUCCESS', () => {
// const albums = [{ id: 1 }, { id: 2 }];
// const content = {
// name: 'album name',
// photos: [
// { id: 4 },
// { id: 5 },
// ],
// };
// const payload = {
// albumId: 1,
// content,
// };
// const originalState = { ...initialState, albums, meta: { error: '' } };
// const stateResult = uploadReducer({ ...originalState, albums, meta: { error: '' } }, {
// type: GET_ALBUM_CONTENT_SUCCESS,
// payload,
// });
// const expectedState = {
// albums: [{
// id: 1,
// content,
// meta: { error: '', loading: false },
// },
// { id: 2 }],
// meta: { error: '' },
// };
// expect(stateResult).toEqual(expectedState);
// });
// test('CASE 8: should return state with album error when type is GET_ALBUM_CONTENT_ERROR', () => {
// const albums = [{ id: 1 }, { id: 2 }];
// const albumErr = new Error('getAlbumsContentError');
// const payload = {
// albumId: 1,
// error: albumErr,
// };
// const originalState = { ...initialState, albums, meta: { error: '' } };
// const stateResult = uploadReducer({ ...originalState, albums, meta: { error: '' } }, {
// type: GET_ALBUM_CONTENT_ERROR,
// payload,
// });
// const expectedState = {
// albums: [{
// id: 1,
// meta: { error: albumErr, loading: false },
// },
// { id: 2 }],
// meta: { error: '' },
// };
// expect(stateResult).toEqual(expectedState);
// });
// test('CASE 9: should return state with album error when type is CREATE_ALBUM_SUCCESS', () => {
// const albums = [{ id: 1 }, { id: 2 }];
// const payload = {
// album: { id: 3 },
// };
// const originalState = { ...initialState, albums, meta: { error: '' } };
// const stateResult = uploadReducer({ ...originalState, albums, meta: { error: '' } }, {
// type: CREATE_ALBUM_SUCCESS,
// payload,
// });
// const expectedState = {
// albums: [
// { id: 1 },
// { id: 2 },
// { id: 3, meta: { error: '', loading: false } },
// ],
// meta: { error: '', loading: false },
// };
// expect(stateResult).toEqual(expectedState);
// });
// test('CASE 10: should empty the state on LOGOUT_SUCCESS', () => {
// const existingState = [{ id: 1 }, { id: 2 }];
// expect(uploadReducer(existingState, { type: LOGOUT_SUCCESS }))
// .toEqual(initialState);
// });
});