Skip to content

Commit 65e81dc

Browse files
author
Bernabe
committed
add suport with cookies when there is not storage available
1 parent 22aaad4 commit 65e81dc

File tree

3 files changed

+43
-19
lines changed

3 files changed

+43
-19
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"main": "dist/index.js",
66
"scripts": {
77
"build": "npm run clean && babel src --out-dir dist",
8-
"test": "jest",
8+
"test": "jest /src/__tests__",
99
"test:cover": "npm run test -- --coverage",
1010
"test:cover:CI": "npm run test:cover && cat ./coverage/lcov.info | node_modules/coveralls/bin/coveralls.js",
1111
"lint": "eslint src",
@@ -51,7 +51,8 @@
5151
"webpack": "2.2.1"
5252
},
5353
"dependencies": {
54-
"localforage": "^1.4.0 || ^1.5.0"
54+
"localforage": "^1.4.0 || ^1.5.0",
55+
"js-cookie": "2.1.4"
5556
},
5657
"peerDependencies": {
5758
"react": "^0.14.0 || ^15.0.0",

src/__tests__/index.spec.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { sessionService, sessionReducer } from '../index';
44
import { initialState } from '../reducer';
55
import { createStore } from 'redux';
66
import { __setError, __setSession, __setUser } from 'localforage';
7+
import * as Cookies from "js-cookie";
78

89
jest.mock('localforage');
910

@@ -170,15 +171,14 @@ describe('API functions', () => {
170171
});
171172

172173
describe('localforage returns error', () => {
173-
test('change authenticated flag to false value', (done) => {
174+
beforeEach(() => {
174175
__setError(true);
175-
// wait for change the redux store
176-
const unsubscribe = store.subscribe(() => {
177-
expect(store.getState().authenticated).toEqual(false);
178-
unsubscribe();
179-
done();
180-
});
176+
});
181177

178+
test('call the cookies service to save the data', () => {
179+
Cookies.set = jest.fn(() => {
180+
expect(Cookies.set).toHaveBeenCalled();
181+
});
182182
sessionService.saveSession(session);
183183
});
184184
});

src/index.js

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as constant from './constants';
22
import * as localForage from 'localforage';
3+
import * as Cookies from "js-cookie";
34
import {
45
getSessionSuccess,
56
getSessionError,
@@ -67,9 +68,18 @@ export class sessionService {
6768
}
6869

6970
static saveSession(session) {
70-
return localForage.setItem(constant.USER_SESSION, session)
71-
.then(() => instance.store.dispatch(getSessionSuccess()))
72-
.catch(() => instance.store.dispatch(getSessionError()));
71+
return new Promise((resolve) => {
72+
localForage.setItem(constant.USER_SESSION, session)
73+
.then(() => {
74+
instance.store.dispatch(getSessionSuccess());
75+
resolve();
76+
})
77+
.catch(() => {
78+
Cookies.set(constant.USER_SESSION, session);
79+
instance.store.dispatch(getSessionSuccess());
80+
resolve();
81+
});
82+
});
7383
}
7484

7585
static loadSession() {
@@ -79,7 +89,8 @@ export class sessionService {
7989
if (currentSession) {
8090
resolve(currentSession);
8191
} else {
82-
reject('Session not found');
92+
const cookies = Cookies.getJSON(constant.USER_SESSION);
93+
cookies ? resolve(cookies) : reject('Session not found');
8394
}
8495
})
8596
.catch(err => reject(err));
@@ -89,13 +100,23 @@ export class sessionService {
89100
static deleteSession() {
90101
return localForage.removeItem(constant.USER_SESSION).then(() => {
91102
instance.store.dispatch(getSessionError());
92-
}).catch(err => err);
103+
Cookies.remove(constant.USER_SESSION);
104+
});
93105
}
94106

95107
static saveUser(user) {
96-
return localForage.setItem(constant.USER_DATA, user)
97-
.then((user) => instance.store.dispatch(getUserSessionSuccess(user)))
98-
.catch(() => instance.store.dispatch(getUserSessionError(user)));
108+
return new Promise((resolve) => {
109+
localForage.setItem(constant.USER_DATA, user)
110+
.then((user) => {
111+
instance.store.dispatch(getUserSessionSuccess(user));
112+
resolve();
113+
})
114+
.catch(() => {
115+
instance.store.dispatch(getUserSessionSuccess(user));
116+
Cookies.set(constant.USER_DATA, user);
117+
resolve();
118+
});
119+
});
99120
}
100121

101122
static loadUser() {
@@ -105,7 +126,8 @@ export class sessionService {
105126
if (currentUser) {
106127
resolve(currentUser);
107128
} else {
108-
reject('User not found');
129+
const cookies = Cookies.getJSON(constant.USER_DATA);
130+
cookies ? resolve(cookies) : reject('User not found');
109131
}
110132
})
111133
.catch(err => reject(err));
@@ -115,7 +137,8 @@ export class sessionService {
115137
static deleteUser() {
116138
return localForage.removeItem(constant.USER_DATA).then(() => {
117139
instance.store.dispatch(getUserSessionError());
118-
}).catch(err => err);
140+
Cookies.remove(constant.USER_DATA);
141+
});
119142
}
120143
}
121144

0 commit comments

Comments
 (0)