Skip to content

Commit

Permalink
test: Added tests for ObjectStorage, improved its set and del methods
Browse files Browse the repository at this point in the history
  • Loading branch information
alexey-detr committed Dec 1, 2017
1 parent ec6d6f0 commit db84e18
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 12 deletions.
14 changes: 6 additions & 8 deletions ObjectStorage.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
'use strict';

module.exports = class ObjectStorage {
class ObjectStorage {
constructor() {
this.data = {};
}

set(key, value, ttl = null) {
if (ttl) {
throw new Error('TTL is not supported for non-persistent object storage.');
return Promise.reject(new Error('TTL is not supported for non-persistent object storage.'));
}
this.data[key] = value;
return Promise.resolve();
Expand All @@ -18,11 +18,9 @@ module.exports = class ObjectStorage {
}

del(key) {
try {
delete this.data[key];
} catch (err) {
return Promise.reject(err);
}
delete this.data[key];
return Promise.resolve();
}
};
}

module.exports = ObjectStorage;
6 changes: 4 additions & 2 deletions SessionRequestHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const uuidv4 = require('uuid/v4');

module.exports = class SessionRequestHandler {
class SessionRequestHandler {
/**
* @param req
* @param res
Expand Down Expand Up @@ -67,4 +67,6 @@ module.exports = class SessionRequestHandler {
delete this.sessionId;
return this.storage.del(sessionId);
}
};
}

module.exports = SessionRequestHandler;
60 changes: 60 additions & 0 deletions __test__/ObjectStorage.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
'use strict';

const ObjectStorage = require('../ObjectStorage');

describe('ObjectStorage', () => {
describe('constructor', () => {
it('should init with empty data property', () => {
const objectStorage = new ObjectStorage();
expect(Object.keys(objectStorage.data)).toHaveLength(0);
expect(objectStorage.data).toBeInstanceOf(Object);
});
});

describe('set', () => {
it('should set value to data property', () => {
const objectStorage = new ObjectStorage();
objectStorage.set('prop', 'value');
expect(objectStorage.data.prop).toEqual('value');
});

it('should throw error if TTL was specified', () => {
const objectStorage = new ObjectStorage();
expect(objectStorage.set('prop', 'value', 10)).rejects.toBeInstanceOf(Error);
});

it('should return resolved promise without value', () => {
const objectStorage = new ObjectStorage();
expect(objectStorage.set('prop', 'value')).resolves.toBeUndefined();
});
});

describe('get', () => {
it('should fetch value from data property', () => {
const objectStorage = new ObjectStorage();
objectStorage.set('prop', 'value');
expect(objectStorage.get('prop')).resolves.toEqual('value');
});

it('should return undefined if value was not found', () => {
const objectStorage = new ObjectStorage();
expect(objectStorage.get('prop')).resolves.toBeUndefined();
});
});

describe('del', () => {
it('should delete value in data property', () => {
const objectStorage = new ObjectStorage();
objectStorage.set('prop', 'value');
expect(objectStorage.data.prop).toEqual('value');
objectStorage.del('prop');
expect(objectStorage.data.prop).toBeUndefined();
});

it('should return resolved promise without value', () => {
const objectStorage = new ObjectStorage();
objectStorage.set('prop', 'value');
expect(objectStorage.del('prop')).resolves.toBeUndefined();
});
})
});
4 changes: 2 additions & 2 deletions __test__/SessionRequestHandler.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ describe('SessionRequestHandler', () => {

expect(sessionHandler.config.loadUser).toHaveBeenCalledTimes(1);
expect(sessionHandler.req.user).not.toBeUndefined();
expect(sessionHandler.config.loadUser).resolves.toMatchObject({id: 123});
expect(sessionHandler.config.loadUser()).resolves.toMatchObject({id: 123});
});

it('should set null as user into req if loadUser function is set in config but there is no session data in storage', async () => {
Expand Down Expand Up @@ -196,7 +196,7 @@ describe('SessionRequestHandler', () => {

expect(sessionHandler.config.loadUser).toHaveBeenCalledTimes(1);
expect(sessionHandler.req.user).not.toBeUndefined();
expect(sessionHandler.config.loadUser).resolves.toMatchObject({id: 123});
expect(sessionHandler.config.loadUser()).resolves.toMatchObject({id: 123});
});
});

Expand Down

0 comments on commit db84e18

Please sign in to comment.