Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 53 additions & 35 deletions __mocks__/localforage.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,62 @@ import { USER_SESSION, USER_DATA } from '../src/constants';

const localforage = jest.genMockFromModule('localforage');

function createInstance() {
return new LocalForage();
}

let throwError = false;
let user = undefined;
let session = undefined;

class LocalForage {
constructor() {}

setItem(item, data) {
return new Promise((resolve, reject) => {
if (item === USER_SESSION) {
session = data;
} else if (item === USER_DATA) {
user = data;
}
throwError ? reject() : resolve(data);
});
}

getItem(item) {
return new Promise((resolve) => {
if (item === USER_SESSION) {
return resolve(session);
} else if (item === USER_DATA) {
return resolve(user);
}
});
}

removeItem(item) {
return new Promise((resolve) => {
if (item === USER_SESSION) {
session = undefined;
} else if (item === USER_DATA) {
user = undefined;
}
resolve();
});
}

__setError(error) {
throwError = error;
}

__setUser(item) {
user = item;
}

__setSession(item) {
session = item;
}
}

function __setError(error) {
throwError = error;
}
Expand All @@ -20,41 +72,7 @@ function __setSession(item) {
session = item;
}

function setItem(item, data) {
return new Promise((resolve, reject) => {
if (item === USER_SESSION) {
session = data;
} else if (item === USER_DATA) {
user = data;
}
throwError ? reject() : resolve(data);
});
}

function getItem(item) {
return new Promise((resolve) => {
if (item === USER_SESSION) {
return resolve(session);
} else if (item === USER_DATA) {
return resolve(user);
}
});
}

function removeItem(item) {
return new Promise((resolve) => {
if (item === USER_SESSION) {
session = undefined;
} else if (item === USER_DATA) {
user = undefined;
}
resolve();
});
}

localforage.setItem = setItem;
localforage.getItem = getItem;
localforage.removeItem = removeItem;
localforage.createInstance = createInstance;
localforage.__setError = __setError;
localforage.__setUser = __setUser;
localforage.__setSession = __setSession;
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "redux-react-session",
"version": "2.1.1",
"version": "2.2.0",
"description": "",
"main": "dist/index.js",
"scripts": {
Expand Down Expand Up @@ -53,7 +53,7 @@
"dependencies": {
"immutable": "^3.8.1",
"js-cookie": "2.1.4",
"localforage": "1.5.1"
"localforage": "1.5.5"
},
"peerDependencies": {
"react": "^0.14.0 || ^15.0.0",
Expand Down
9 changes: 6 additions & 3 deletions src/__tests__/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,23 @@
import { sessionService, sessionReducer } from '../index';
import { initialState } from '../reducer';
import { createStore } from 'redux';
import { __setError, __setSession, __setUser } from 'localforage';
import * as Cookies from "js-cookie";

jest.mock('localforage');

const localforage = require('localforage');
const { __setError, __setSession, __setUser } = localforage;

describe('API functions', () => {
let store;
const user = { email: 'test@test.com', firstName: 'test', lastName: 'test' };
const session = { token: '12341234' };
beforeAll((done) => {
store = createStore(sessionReducer, initialState);
sessionService.initSessionService(store).then( () => {
const options = { driver: 'LOCALFORAGE' };
sessionService.initSessionService(store, options).then( () => {
done();
})
});
});

describe('refreshFromLocalStorage', () => {
Expand Down
24 changes: 16 additions & 8 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { USER_SESSION, USER_DATA } from './constants';
import * as localForage from 'localforage';
import * as Cookies from "js-cookie";
import {
getSessionSuccess,
Expand Down Expand Up @@ -32,7 +31,16 @@ export class sessionService {
instance.expires = expires;
instance.driver = driver;
instance.server = server;
driver && driver !== 'COOKIES' && localForage.setDriver(localForage[driver]);

// configure the storage
const storageOptions = {
name: 'redux-react-session'
};
const localforage = require('localforage');
if (driver && driver !== 'COOKIES') {
storageOptions.driver = localforage[driver];
}
instance.storage = localforage.createInstance(storageOptions);
}

static initSessionService(store, options) {
Expand Down Expand Up @@ -116,7 +124,7 @@ export class sessionService {
instance.store.dispatch(getSessionSuccess());
resolve();
} else {
localForage.setItem(USER_SESSION, session)
instance.storage.setItem(USER_SESSION, session)
.then(() => {
instance.store.dispatch(getSessionSuccess());
resolve();
Expand All @@ -138,7 +146,7 @@ export class sessionService {
const cookies = Cookies.getJSON(USER_SESSION);
cookies ? resolve(cookies) : reject('Session not found');
} else {
localForage.getItem(USER_SESSION)
instance.storage.getItem(USER_SESSION)
.then((currentSession) => {
if (currentSession) {
resolve(currentSession);
Expand All @@ -153,7 +161,7 @@ export class sessionService {
}

static deleteSession() {
return localForage.removeItem(USER_SESSION).then(() => {
return instance.storage.removeItem(USER_SESSION).then(() => {
instance.store.dispatch(getSessionError());
Cookies.remove(USER_SESSION);
delete instance[USER_SESSION];
Expand All @@ -171,7 +179,7 @@ export class sessionService {
instance.store.dispatch(getUserSessionSuccess(user));
resolve();
} else {
localForage.setItem(USER_DATA, user)
instance.storage.setItem(USER_DATA, user)
.then((user) => {
instance.store.dispatch(getUserSessionSuccess(user));
resolve();
Expand All @@ -193,7 +201,7 @@ export class sessionService {
const cookies = Cookies.getJSON(USER_DATA);
cookies ? resolve(cookies) : reject('User not found');
} else {
localForage.getItem(USER_DATA)
instance.storage.getItem(USER_DATA)
.then((currentUser) => {
if (currentUser) {
resolve(currentUser);
Expand All @@ -208,7 +216,7 @@ export class sessionService {
}

static deleteUser() {
return localForage.removeItem(USER_DATA).then(() => {
return instance.storage.removeItem(USER_DATA).then(() => {
instance.store.dispatch(getUserSessionError());
Cookies.remove(USER_DATA);
delete instance[USER_DATA];
Expand Down
Loading