Skip to content

Commit

Permalink
feat: CMS-2637 CMS-2638 expose EventEmitter on Core, send event
Browse files Browse the repository at this point in the history
  • Loading branch information
simon-scherzinger committed Feb 10, 2017
1 parent 8bc3f79 commit fe84571
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/Accounts.js
Expand Up @@ -150,6 +150,7 @@ export default class Accounts extends Core {
})
.then(([token]) => {
this.tokenStore.set(token.token);
this.events.emit('login', token.token);

return token.token;
});
Expand All @@ -174,6 +175,7 @@ export default class Accounts extends Core {
return post(this.environment, request);
})
.then(() => {
this.events.emit('logout');
this.tokenStore.del();
return Promise.resolve();
});
Expand Down
26 changes: 25 additions & 1 deletion src/Core.js
@@ -1,6 +1,7 @@
import traverson from 'traverson';
import HalAdapter from 'traverson-hal';
import TokenStoreFactory from './TokenStore';
import TokenStoreFactory from './TokenStore';
import events from './EventEmitter';

traverson.registerMediaType(HalAdapter.mediaType, HalAdapter);

Expand All @@ -16,6 +17,7 @@ export default class Core {
throw new Error('url must be defined');
}

this.events = events;
this.tokenStore = TokenStoreFactory('live');
this.traversal = traverson.from(url).jsonHal()
.addRequestOptions({ headers: { Accept: 'application/hal+json' } });
Expand Down Expand Up @@ -57,4 +59,26 @@ export default class Core {
this.tokenStore.set(token);
return this;
}

/**
* Attaches a listener on the underlying EventEmitter.
*
* @param {string} label the event type
* @param {function} listener the listener
* @returns {undefined}
*/
on(label, listener) {
return this.events.on(label, listener);
}

/**
* Removes a previously attached listener from the underlying EventEmitter.
*
* @param {string} label the event type
* @param {function} listener the listener
* @returns {boolean} whether or not the listener was removed
*/
removeListener(label, listener) {
return this.events.removeListener(label, listener);
}
}
2 changes: 1 addition & 1 deletion src/helper.js
Expand Up @@ -76,7 +76,7 @@ function traversonWrapper(func, environment, t, body) {
if (TokenStoreFactory(environment) && err instanceof Problem &&
(err.code % 1000 === 401 || err.code % 1000 === 402)) {
TokenStoreFactory(environment).del();
events.emit('loggedOut', err);
events.emit('logout', err);
}

events.emit('error', err);
Expand Down
13 changes: 12 additions & 1 deletion test/Core.test.js
Expand Up @@ -55,6 +55,17 @@ describe('Core', () => {
};
throws.should.throw(Error);
});
it('should attach listener', () => {
core.on('attachTest', () => undefined);
emitter.listeners.get('attachTest').length.should.be.equal(1);
});
it('should remove listener', () => {
const listener = () => undefined;
core.on('removeTest', listener);
emitter.listeners.get('removeTest').length.should.be.equal(1);
core.removeListener('removeTest', listener);
emitter.listeners.get('removeTest').length.should.be.equal(0);
});
});

describe('Network Helper', () => {
Expand All @@ -67,7 +78,7 @@ describe('Network Helper', () => {
errorSpy = sinon.spy();
loggedOutSpy = sinon.spy();
emitter.on('error', errorSpy);
emitter.on('loggedOut', loggedOutSpy);
emitter.on('logout', loggedOutSpy);
});
beforeEach(() => {
errorSpy.reset();
Expand Down
4 changes: 4 additions & 0 deletions typings/Core.d.ts
Expand Up @@ -4,6 +4,10 @@ export declare class Core {
newRequest(): any;

setToken(token: string): Core;

on(label: string, callback: () => void): void;

removeListener(label: string, callback: () => void): boolean;
}

type environment = 'live' | 'stage' | 'nightly' | 'develop';

0 comments on commit fe84571

Please sign in to comment.