Skip to content

Commit 194f65a

Browse files
author
Bernabe Gonzalez
committed
add tests
1 parent fbb51ea commit 194f65a

File tree

6 files changed

+247
-55
lines changed

6 files changed

+247
-55
lines changed

examples/example/src/actions/sessionActions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import * as sessionApi from '../api/sessionApi';
55
export const login = (user) => {
66
return () => {
77
return sessionApi.login(user).then(response => {
8-
sessionService.saveSession(response.token)
8+
const { token } = response;
9+
sessionService.saveSession({ token })
910
.then(() => {
1011
sessionService.saveUser(response.data)
1112
.then(() => {

examples/example/src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const reducer = combineReducers({
1717
const store = createStore(reducer, undefined, compose(applyMiddleware(thunkMiddleware)));
1818

1919
// Init the session service
20-
sessionService.initServerSession(store);
20+
sessionService.initSessionService(store, { driver: 'COOKIES' });
2121

2222
render(
2323
<Provider store={store}>

examples/react-router-v4-example/src/actions/sessionActions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import * as sessionApi from '../api/sessionApi';
44
export const login = (user, history) => {
55
return () => {
66
return sessionApi.login(user).then(response => {
7-
sessionService.saveSession(response.token)
7+
const { token } = response;
8+
sessionService.saveSession({ token })
89
.then(() => {
910
sessionService.saveUser(response.data)
1011
.then(() => {

src/__tests__/index.spec.js

Lines changed: 131 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,45 @@ describe('API functions', () => {
156156
});
157157

158158
describe('saveSession', () => {
159-
describe('localforage returns success', () => {
159+
describe('with localforage', () => {
160+
describe('localforage returns success', () => {
161+
test('change authenticated flag to true value', (done) => {
162+
__setError(false);
163+
// wait for change the redux store
164+
const unsubscribe = store.subscribe(() => {
165+
expect(store.getState().authenticated).toEqual(true);
166+
unsubscribe();
167+
done();
168+
});
169+
170+
sessionService.saveSession(session);
171+
});
172+
});
173+
174+
describe('localforage returns error', () => {
175+
beforeEach(() => {
176+
__setError(true);
177+
});
178+
179+
test('call the cookies service to save the data', () => {
180+
Cookies.set = jest.fn(() => {
181+
expect(Cookies.set).toHaveBeenCalled();
182+
});
183+
sessionService.saveSession(session);
184+
});
185+
});
186+
});
187+
188+
describe('with cookies', () => {
189+
beforeEach(() => {
190+
sessionService.setOptions(store, { driver: 'COOKIES' });
191+
});
192+
193+
afterEach(() => {
194+
sessionService.setOptions(store);
195+
});
196+
160197
test('change authenticated flag to true value', (done) => {
161-
__setError(false);
162198
// wait for change the redux store
163199
const unsubscribe = store.subscribe(() => {
164200
expect(store.getState().authenticated).toEqual(true);
@@ -169,41 +205,47 @@ describe('API functions', () => {
169205
sessionService.saveSession(session);
170206
});
171207
});
208+
});
172209

173-
describe('localforage returns error', () => {
174-
beforeEach(() => {
175-
__setError(true);
210+
describe('loadSession', () => {
211+
describe('with localforage', () => {
212+
describe('localforage returns success', () => {
213+
test('return the correct value of the session stored', () => {
214+
__setSession(session);
215+
return sessionService.loadSession()
216+
.then((currentSession) => {
217+
expect(currentSession).toMatchObject(session);
218+
});
219+
});
176220
});
177221

178-
test('call the cookies service to save the data', () => {
179-
Cookies.set = jest.fn(() => {
180-
expect(Cookies.set).toHaveBeenCalled();
222+
describe('localforage returns error', () => {
223+
test('return an error', () => {
224+
__setSession(undefined);
225+
return sessionService.loadSession()
226+
.catch((error) => {
227+
expect(error).toEqual('Session not found');
228+
});
181229
});
182-
sessionService.saveSession(session);
183230
});
184231
});
185-
});
186232

187-
describe('loadSession', () => {
188-
describe('localforage returns success', () => {
233+
describe('with cookies', () => {
234+
beforeEach(() => {
235+
sessionService.setOptions(store, { driver: 'COOKIES' });
236+
});
237+
238+
afterEach(() => {
239+
sessionService.setOptions(store);
240+
});
241+
189242
test('return the correct value of the session stored', () => {
190-
__setSession(session);
191243
return sessionService.loadSession()
192244
.then((currentSession) => {
193245
expect(currentSession).toMatchObject(session);
194246
});
195247
});
196248
});
197-
198-
describe('localforage returns error', () => {
199-
test('return an error', () => {
200-
__setSession(undefined);
201-
return sessionService.loadSession()
202-
.catch((error) => {
203-
expect(error).toEqual('Session not found');
204-
});
205-
});
206-
});
207249
});
208250

209251
describe('deleteSession', () => {
@@ -220,26 +262,49 @@ describe('API functions', () => {
220262
});
221263

222264
describe('saveUser', () => {
223-
describe('localforage returns success', () => {
224-
test('change user in store to the user data', (done) => {
225-
__setError(false);
226-
// wait for change the redux store
227-
const unsubscribe = store.subscribe(() => {
228-
expect(store.getState().user).toMatchObject(user);
229-
unsubscribe();
230-
done();
265+
describe('with localforage', () => {
266+
describe('localforage returns success', () => {
267+
test('change user in store to the user data', (done) => {
268+
__setError(false);
269+
// wait for change the redux store
270+
const unsubscribe = store.subscribe(() => {
271+
expect(store.getState().user).toMatchObject(user);
272+
unsubscribe();
273+
done();
274+
});
275+
276+
sessionService.saveUser(user);
231277
});
278+
});
232279

233-
sessionService.saveUser(user);
280+
describe('localforage returns error', () => {
281+
test('change user in store to an empty object', (done) => {
282+
__setError(true);
283+
// wait for change the redux store
284+
const unsubscribe = store.subscribe(() => {
285+
expect(store.getState().user).toMatchObject({});
286+
unsubscribe();
287+
done();
288+
});
289+
290+
sessionService.saveUser(user);
291+
});
234292
});
235293
});
236294

237-
describe('localforage returns error', () => {
238-
test('change user in store to an empty object', (done) => {
239-
__setError(true);
295+
describe('with cookies', () => {
296+
beforeEach(() => {
297+
sessionService.setOptions(store, { driver: 'COOKIES' });
298+
});
299+
300+
afterEach(() => {
301+
sessionService.setOptions(store);
302+
});
303+
304+
test('change user in store to the user data', (done) => {
240305
// wait for change the redux store
241306
const unsubscribe = store.subscribe(() => {
242-
expect(store.getState().user).toMatchObject({});
307+
expect(store.getState().user).toMatchObject(user);
243308
unsubscribe();
244309
done();
245310
});
@@ -250,22 +315,41 @@ describe('API functions', () => {
250315
});
251316

252317
describe('loadUser', () => {
253-
describe('localforage returns success', () => {
254-
test('return the correct value of the user stored', () => {
255-
__setUser(user);
256-
return sessionService.loadUser()
257-
.then((currentUser) => {
258-
expect(currentUser).toMatchObject(user);
318+
describe('with localforage', () => {
319+
describe('localforage returns success', () => {
320+
test('return the correct value of the user stored', () => {
321+
__setUser(user);
322+
return sessionService.loadUser()
323+
.then((currentUser) => {
324+
expect(currentUser).toMatchObject(user);
325+
});
326+
});
327+
});
328+
329+
describe('localforage returns error', () => {
330+
test('return an error', () => {
331+
__setUser(undefined);
332+
return sessionService.loadUser()
333+
.catch((error) => {
334+
expect(error).toEqual('User not found');
335+
});
259336
});
260337
});
261338
});
262339

263-
describe('localforage returns error', () => {
264-
test('return an error', () => {
265-
__setUser(undefined);
340+
describe('with cookies', () => {
341+
beforeEach(() => {
342+
sessionService.setOptions(store, { driver: 'COOKIES' });
343+
});
344+
345+
afterEach(() => {
346+
sessionService.setOptions(store);
347+
});
348+
349+
test('return the correct value of the user stored', () => {
266350
return sessionService.loadUser()
267-
.catch((error) => {
268-
expect(error).toEqual('User not found');
351+
.then((currentUser) => {
352+
expect(currentUser).toMatchObject(user);
269353
});
270354
});
271355
});

src/__tests__/server.spec.js

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
'use strict';
2+
3+
import { sessionService, sessionReducer } from '../index';
4+
import { initialState } from '../reducer';
5+
import { createStore } from 'redux';
6+
// import { __setError, __setSession, __setUser } from 'localforage';
7+
// import * as Cookies from "js-cookie";
8+
9+
jest.mock('localforage');
10+
11+
describe('API functions', () => {
12+
let store;
13+
let user;
14+
15+
describe('server', () => {
16+
describe('with session and user in the request', () => {
17+
beforeEach(() => {
18+
store = createStore(sessionReducer, initialState);
19+
user = { email: 'test@test.com', firstName: 'test', lastName: 'test' };
20+
const cookies = 'USER-SESSION={%22token%22:%2212345%22}; USER_DATA={%22email%22:%22test@test.com%22%2C%22firstName%22:%22test%22%2C%22lastName%22:%22test%22}';
21+
const req = { get: jest.fn(() => cookies) };
22+
sessionService.initServerSession(store, req, { redirectPath: 'redirectionPath' });
23+
});
24+
25+
describe('saveFromClient', () => {
26+
test('change authenticated flag to true', (done) => {
27+
// wait for change the redux store
28+
const unsubscribe = store.subscribe(() => {
29+
const state = store.getState();
30+
expect(state.authenticated).toEqual(true);
31+
unsubscribe();
32+
done();
33+
});
34+
});
35+
36+
test('save the user', (done) => {
37+
// wait for change the redux store
38+
const unsubscribe = store.subscribe(() => {
39+
const state = store.getState();
40+
// wait to change the user
41+
if (!(Object.keys(state.user).length === 0 && state.user.constructor === Object)) {
42+
expect(state.user).toMatchObject(user);
43+
unsubscribe();
44+
done();
45+
}
46+
});
47+
});
48+
});
49+
50+
describe('checkAuth', () => {
51+
let nextState;
52+
let replace;
53+
beforeEach(() => {
54+
nextState = { location: { pathname: 'test' } };
55+
replace = jest.fn();
56+
});
57+
58+
test('does call next function', (done) => {
59+
const next = jest.fn(() => {
60+
expect(next).toHaveBeenCalled();
61+
done();
62+
});
63+
sessionService.checkAuth(nextState, replace, next);
64+
});
65+
});
66+
});
67+
68+
describe('without any item in the request', () => {
69+
beforeEach(() => {
70+
store = createStore(sessionReducer, initialState);
71+
const cookies = undefined;
72+
const req = { get: jest.fn(() => cookies) };
73+
sessionService.initServerSession(store, req, { redirectPath: 'redirectionPath' });
74+
});
75+
76+
describe('checkAuth', () => {
77+
let nextState;
78+
let next;
79+
beforeEach(() => {
80+
nextState = { location: { pathname: 'test' } };
81+
next = jest.fn();
82+
});
83+
84+
test('does call replace function', (done) => {
85+
const replace = jest.fn(() => {
86+
expect(replace).toHaveBeenCalled();
87+
done();
88+
});
89+
sessionService.checkAuth(nextState, replace, next);
90+
});
91+
92+
test('does redirect to the redirectPath', (done) => {
93+
const expectedArg = {
94+
pathname: 'redirectionPath',
95+
state: { nextPathname: nextState.location.pathname }
96+
};
97+
const replace = jest.fn(() => {
98+
expect(replace).toHaveBeenCalledWith(expectedArg);
99+
done();
100+
});
101+
sessionService.checkAuth(nextState, replace, next);
102+
});
103+
});
104+
});
105+
});
106+
});

src/index.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ export class sessionService {
4949

5050
return list;
5151
};
52-
sessionService.refreshFromClient(parseCookies(req));
52+
sessionService.saveFromClient(parseCookies(req));
5353
}
5454

55-
static refreshFromClient(cookies) {
55+
static saveFromClient(cookies) {
5656
if (Object.keys(cookies).length > 0) {
57-
sessionService.saveSession(cookies[USER_SESSION]);
58-
sessionService.saveUser(cookies[USER_DATA]);
57+
sessionService.saveSession(cookies[USER_SESSION])
58+
.then(() => sessionService.saveUser(cookies[USER_DATA]));
5959
}
6060
}
6161

@@ -152,7 +152,7 @@ export class sessionService {
152152
return new Promise((resolve) => {
153153
if (instance.server) {
154154
instance[USER_DATA] = user;
155-
instance.store.dispatch(getSessionSuccess());
155+
instance.store.dispatch(getUserSessionSuccess(user));
156156
resolve();
157157
} else if (instance.driver === 'COOKIES') {
158158
Cookies.set(USER_DATA, user);

0 commit comments

Comments
 (0)