completion
This commit is contained in:
335
ioneapps-maagapp-ee31119a522d/__tests__/reducers/google.js
Normal file
335
ioneapps-maagapp-ee31119a522d/__tests__/reducers/google.js
Normal file
@@ -0,0 +1,335 @@
|
||||
/* global describe: true, test:true, expect:true */
|
||||
import { google as googleReducer, initialState } from '~/reducers/google';
|
||||
import {
|
||||
SET_GOOGLE_INFO,
|
||||
GET_GOOGLE_TOKEN,
|
||||
GET_GOOGLE_TOKEN_SUCCESS,
|
||||
LOGOUT_SUCCESS,
|
||||
LOGOUT_FROM_GOOGLE_SUCCESS,
|
||||
GET_GOOGLE_TOKEN_ERROR,
|
||||
GET_GOOGLE_ALBUMS,
|
||||
GET_GOOGLE_CATEGORIES,
|
||||
GET_GOOGLE_ALBUMS_ERROR,
|
||||
GET_GOOGLE_CATEGORIES_ERROR,
|
||||
GET_GOOGLE_ALBUMS_SUCCESS,
|
||||
GET_GOOGLE_CATEGORIES_SUCCESS,
|
||||
GET_DYNAMIC_PLAYLISTS_ERROR,
|
||||
GET_DYNAMIC_PLAYLISTS_SUCCESS,
|
||||
GET_GOOGLE_ALBUM_CONTENT_SUCCESS,
|
||||
} from '~/store/actionTypes';
|
||||
|
||||
import Factory from 'helper/factories/google';
|
||||
|
||||
describe('google reducer', () => {
|
||||
test('CASE 1: should return initial state', () => {
|
||||
expect(googleReducer(undefined, { type: 'Default' }))
|
||||
.toEqual(initialState);
|
||||
});
|
||||
|
||||
test('CASE 2: should return state with Google info set when type is SET_GOOGLE_INFO', () => {
|
||||
const googleInfo = {
|
||||
email: 'user@gmail.com',
|
||||
photo: 'https://lh4.googleusercontent.com/photo.jpg',
|
||||
idToken: '{idToken}',
|
||||
id: '{id}',
|
||||
familyName: '{lastName}',
|
||||
serverAuthCode: '{serverAuthCode}',
|
||||
accessToken: '{accessToken}',
|
||||
givenName: '{firstName}',
|
||||
accessTokenExpirationDate: 3260.7057960033417,
|
||||
name: '{firstName} {lastName}',
|
||||
};
|
||||
const expectedState = { ...initialState, auth: googleInfo };
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: SET_GOOGLE_INFO, payload: googleInfo,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 3: should return state with meta set when type is GET_GOOGLE_TOKEN', () => {
|
||||
const expectedState = initialState;
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: GET_GOOGLE_TOKEN,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 4: should return state with Google set when type is GET_GOOGLE_TOKEN_SUCCESS', () => {
|
||||
const googleInfo = {
|
||||
email: 'user@gmail.com',
|
||||
photo: 'https://lh4.googleusercontent.com/photo.jpg',
|
||||
idToken: '{idToken}',
|
||||
id: '{id}',
|
||||
familyName: '{lastName}',
|
||||
serverAuthCode: '{serverAuthCode}',
|
||||
accessToken: '{accessToken}',
|
||||
givenName: '{firstName}',
|
||||
accessTokenExpirationDate: 3260.7057960033417,
|
||||
name: '{firstName} {lastName}',
|
||||
};
|
||||
const googleToken = { googleId: googleInfo.email, valid: true };
|
||||
const expectedState = {
|
||||
...initialState,
|
||||
auth: googleInfo,
|
||||
};
|
||||
const stateResult = googleReducer({ ...initialState, auth: googleInfo }, {
|
||||
type: GET_GOOGLE_TOKEN_SUCCESS,
|
||||
payload: { googleToken },
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 5: should return state with Google unset when type is GET_GOOGLE_TOKEN_SUCCESS and server Token is invalid', () => {
|
||||
const googleInfo = {
|
||||
email: 'user@gmail.com',
|
||||
photo: 'https://lh4.googleusercontent.com/photo.jpg',
|
||||
idToken: '{idToken}',
|
||||
id: '{id}',
|
||||
familyName: '{lastName}',
|
||||
serverAuthCode: '{serverAuthCode}',
|
||||
accessToken: '{accessToken}',
|
||||
givenName: '{firstName}',
|
||||
accessTokenExpirationDate: 3260.7057960033417,
|
||||
name: '{firstName} {lastName}',
|
||||
};
|
||||
const googleToken = { googleId: googleInfo.email, valid: false };
|
||||
const expectedState = {
|
||||
...initialState,
|
||||
auth: {},
|
||||
};
|
||||
const stateResult = googleReducer({ ...initialState, auth: googleInfo }, {
|
||||
type: GET_GOOGLE_TOKEN_SUCCESS,
|
||||
payload: { googleToken },
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 6: should return state with Google unset when type is GET_GOOGLE_TOKEN_SUCCESS and server Token is valid but googleId does not match the email', () => {
|
||||
const googleInfo = {
|
||||
email: 'user@gmail.com',
|
||||
photo: 'https://lh4.googleusercontent.com/photo.jpg',
|
||||
idToken: '{idToken}',
|
||||
id: '{id}',
|
||||
familyName: '{lastName}',
|
||||
serverAuthCode: '{serverAuthCode}',
|
||||
accessToken: '{accessToken}',
|
||||
givenName: '{firstName}',
|
||||
accessTokenExpirationDate: 3260.7057960033417,
|
||||
name: '{firstName} {lastName}',
|
||||
};
|
||||
const googleToken = { googleId: 'other@gmail.com', valid: true };
|
||||
const expectedState = {
|
||||
...initialState,
|
||||
auth: {},
|
||||
};
|
||||
const stateResult = googleReducer({ ...initialState, auth: googleInfo }, {
|
||||
type: GET_GOOGLE_TOKEN_SUCCESS,
|
||||
payload: { googleToken },
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 7: should return state with meta loading set to false when actionType is GET_GOOGLE_TOKEN_ERROR', () => {
|
||||
const expectedState = initialState;
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: GET_GOOGLE_TOKEN_ERROR,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 7: should return initialState when actionType is LOGOUT_FROM_GOOGLE_SUCCESS', () => {
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: LOGOUT_FROM_GOOGLE_SUCCESS,
|
||||
});
|
||||
expect(stateResult).toEqual(initialState);
|
||||
});
|
||||
|
||||
test('CASE 8: should return initialState when actionType is LOGOUT_SUCCESS', () => {
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: LOGOUT_SUCCESS,
|
||||
});
|
||||
expect(stateResult).toEqual(initialState);
|
||||
});
|
||||
|
||||
test('CASE 9: should return loading for albums set to true when actionType is GET_GOOGLE_ALBUMS', () => {
|
||||
const expectedState = {
|
||||
...initialState,
|
||||
meta: { loading: { ...initialState.meta.loading, albums: true } },
|
||||
};
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: GET_GOOGLE_ALBUMS,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 10: should return loading for categories set to true when actionType is GET_GOOGLE_CATEGORIES', () => {
|
||||
const expectedState = {
|
||||
...initialState,
|
||||
meta: { loading: { ...initialState.meta.loading, categories: true } },
|
||||
};
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: GET_GOOGLE_CATEGORIES,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 11: should return loading for categories set to false when actionType is GET_GOOGLE_ALBUMS_ERROR', () => {
|
||||
const expectedState = {
|
||||
...initialState,
|
||||
meta: { loading: { ...initialState.meta.loading, categories: false } },
|
||||
};
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: GET_GOOGLE_ALBUMS_ERROR,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 12: should return loading for categories set to false when actionType is GET_GOOGLE_CATEGORIES_ERROR', () => {
|
||||
const expectedState = {
|
||||
...initialState,
|
||||
meta: { loading: { ...initialState.meta.loading, categories: false } },
|
||||
};
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: GET_GOOGLE_CATEGORIES_ERROR,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 12: should return albums with alreadySynced set correctly when actionType is GET_GOOGLE_ALBUMS_SUCCESS', () => {
|
||||
const googleId = 'user@gmail.com';
|
||||
const playlists = Factory.buildList('DynamicPlaylist', 4, { googleId });
|
||||
const albums = Factory.buildList('GoogleAlbum', 2);
|
||||
const prevState = {
|
||||
auth: { email: googleId },
|
||||
categories: [],
|
||||
albums: [],
|
||||
allPhotos: {},
|
||||
playlists,
|
||||
meta: { loading: { albums: false, categories: false } },
|
||||
};
|
||||
const expectedState = {
|
||||
...prevState,
|
||||
meta: { loading: { ...initialState.meta.loading, categories: false } },
|
||||
albums: [
|
||||
{ title: 'Album 1', id: 'album1', alreadySynced: true },
|
||||
{ title: 'Album 2', id: 'album2', alreadySynced: true },
|
||||
],
|
||||
allPhotos: {},
|
||||
};
|
||||
const stateResult = googleReducer(prevState, {
|
||||
type: GET_GOOGLE_ALBUMS_SUCCESS,
|
||||
payload: albums,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 13: should return categories with alreadySynced set correctly when actionType is GET_GOOGLE_CATEGORIES_SUCCESS', () => {
|
||||
const googleId = 'user@gmail.com';
|
||||
const playlists = Factory.buildList('DynamicPlaylist', 4, { googleId });
|
||||
const categories = [
|
||||
{ id: 'ANIMAL' },
|
||||
{ id: 'PEOPLE' },
|
||||
{ id: 'LANDSCAPE' },
|
||||
];
|
||||
const prevState = {
|
||||
auth: { email: googleId },
|
||||
categories: [],
|
||||
albums: [],
|
||||
playlists,
|
||||
meta: { loading: { albums: false, categories: false } },
|
||||
};
|
||||
const expectedState = {
|
||||
...prevState,
|
||||
meta: { loading: { ...initialState.meta.loading, categories: false } },
|
||||
categories: [
|
||||
{ id: 'ANIMAL', alreadySynced: true },
|
||||
{ id: 'PEOPLE', alreadySynced: true },
|
||||
{ id: 'LANDSCAPE' },
|
||||
],
|
||||
allPhotos: { alreadySynced: false },
|
||||
};
|
||||
const stateResult = googleReducer(prevState, {
|
||||
type: GET_GOOGLE_CATEGORIES_SUCCESS,
|
||||
payload: { categories, allPhotos: {} },
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
test('CASE 14: should return alreadySynced set correctly when actionType is GET_DYNAMIC_PLAYLISTS_SUCCESS', () => {
|
||||
const googleId = 'user@gmail.com';
|
||||
const playlists = Factory.buildList('DynamicPlaylist', 4, { googleId });
|
||||
const albums = Factory.buildList('GoogleAlbum', 2);
|
||||
const categories = [
|
||||
{ id: 'ANIMAL' },
|
||||
{ id: 'PEOPLE' },
|
||||
{ id: 'LANDSCAPE' },
|
||||
];
|
||||
const prevState = {
|
||||
auth: { email: googleId },
|
||||
categories,
|
||||
albums,
|
||||
playlists: [],
|
||||
meta: { loading: { albums: false, categories: false } },
|
||||
allPhotos: {},
|
||||
};
|
||||
const expectedState = {
|
||||
...prevState,
|
||||
meta: { loading: { albums: false, categories: false } },
|
||||
categories: [
|
||||
{ id: 'ANIMAL', alreadySynced: true },
|
||||
{ id: 'PEOPLE', alreadySynced: true },
|
||||
{ id: 'LANDSCAPE' },
|
||||
],
|
||||
albums,
|
||||
playlists,
|
||||
allPhotos: { alreadySynced: false },
|
||||
};
|
||||
const stateResult = googleReducer(prevState, {
|
||||
type: GET_DYNAMIC_PLAYLISTS_SUCCESS,
|
||||
payload: { google: playlists },
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
|
||||
|
||||
test('CASE 15: should return categories with alreadySynced set correctly when actionType is GET_DYNAMIC_PLAYLISTS_ERROR', () => {
|
||||
const stateResult = googleReducer(initialState, {
|
||||
type: GET_DYNAMIC_PLAYLISTS_ERROR,
|
||||
});
|
||||
expect(stateResult).toEqual(initialState);
|
||||
});
|
||||
|
||||
test('CASE 16: should return album with mediaItems set correctly when actionType is GET_GOOGLE_ALBUM_CONTENT_SUCCESS', () => {
|
||||
const googleId = 'user@gmail.com';
|
||||
const playlists = Factory.buildList('DynamicPlaylist', 4, { googleId });
|
||||
const albums = Factory.buildList('GoogleAlbum', 1);
|
||||
const prevState = {
|
||||
auth: { email: googleId },
|
||||
albums,
|
||||
playlists,
|
||||
meta: { loading: { albums: false, categories: false } },
|
||||
};
|
||||
|
||||
const payload = {
|
||||
title: albums[0].title,
|
||||
id: albums[0].id,
|
||||
mediaItems: [
|
||||
{ id: 'AGj1epUmh4wiG3g2bKOKDoclVoRTsE-_STHFhWdUdhvR142wa0wx4-y-rb9mYq2363Cr0_Gid19iJw4' },
|
||||
{ id: 'AGj1epWNpu29AtPtEyX3ICRDLOcxyUxhCt45UG1C4swn1me84xFxculsQDCJaclsC3mBeX54MBM7HL8' },
|
||||
{ id: 'AGj1epWAvBQE-WStq6wzHkv-4oW28J154cd5SU4KDCUTL-XB9hJdxyT7GCaOLett4qVyRXFFmYHpYJ4' },
|
||||
],
|
||||
};
|
||||
|
||||
const expectedState = {
|
||||
...prevState,
|
||||
meta: { loading: { albums: false, categories: false } },
|
||||
albums: [payload],
|
||||
playlists,
|
||||
};
|
||||
|
||||
const stateResult = googleReducer(prevState, {
|
||||
type: GET_GOOGLE_ALBUM_CONTENT_SUCCESS, payload,
|
||||
});
|
||||
expect(stateResult).toEqual(expectedState);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user