import { assert, expect, spy, use } from 'chai' import * as spies from 'chai-spies' import { SubscribableObserver } from '../../src/utils/SubscribableObserver' use(spies) describe('SubscribableObserver', () => { describe('#subscribe()', () => { it('should be able to add a subcription', async () => { const observer = new SubscribableObserver() const subscription = observer.subscribe() assert.isDefined(subscription.unsubscribe) assert.typeOf(subscription.unsubscribe, 'function') }) it('should be able to unsubscribe', async () => { const observer = new SubscribableObserver() const subscription = observer.subscribe() subscription.unsubscribe() }) }) describe('#next()', () => { it('should be able to emit next value', async () => { const onNextSpy = spy() const observer = new SubscribableObserver() observer.subscribe(onNextSpy) observer.next('test') expect(onNextSpy).to.has.been.called.with('test') observer.next('test') expect(onNextSpy).to.has.been.called.exactly(2) }) }) describe('#complete()', () => { it('should be able to complete', async () => { const onCompleteSpy = spy() const observer = new SubscribableObserver() observer.subscribe(undefined, onCompleteSpy) observer.complete('test') expect(onCompleteSpy).to.has.been.called.with('test') observer.complete('test') expect(onCompleteSpy).to.has.been.called.exactly(1) assert.isTrue(observer.completed) }) }) describe('#error()', () => { it('should be able to emit a error', async () => { const onErrorSpy = spy() const observer = new SubscribableObserver() observer.subscribe(undefined, undefined, onErrorSpy) observer.error('test') expect(onErrorSpy).to.has.been.called.with('test') observer.error('test') expect(onErrorSpy).to.has.been.called.exactly(1) assert.isTrue(observer.completed) }) }) })