mirror of
https://github.com/oceanprotocol-archive/squid-js.git
synced 2024-02-02 15:31:51 +01:00
196 lines
6.2 KiB
TypeScript
196 lines
6.2 KiB
TypeScript
|
import { assert, expect, spy, use } from "chai"
|
||
|
import * as spies from "chai-spies"
|
||
|
|
||
|
import { SubscribableObserver, SubscribablePromise } from "../../src/utils/SubscribablePromise"
|
||
|
|
||
|
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)
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe("SubscribablePromise", () => {
|
||
|
|
||
|
it("should work", async () => {
|
||
|
const subscribible = new SubscribablePromise(() => {})
|
||
|
|
||
|
assert.isDefined(subscribible)
|
||
|
})
|
||
|
|
||
|
describe("#subscribe()", () => {
|
||
|
|
||
|
it("should return a subscription", async () => {
|
||
|
const subscribible = new SubscribablePromise(() => {})
|
||
|
const subscription = subscribible.subscribe(() => {})
|
||
|
|
||
|
assert.isDefined(subscription)
|
||
|
assert.isDefined(subscription.unsubscribe)
|
||
|
assert.typeOf(subscription.unsubscribe, 'function')
|
||
|
})
|
||
|
|
||
|
it("should listen the next values", (done) => {
|
||
|
const onNextSpy = spy()
|
||
|
const subscribible = new SubscribablePromise(observer => {
|
||
|
setTimeout(() => observer.next('test'), 10)
|
||
|
setTimeout(() => observer.next('test'), 20)
|
||
|
})
|
||
|
subscribible.subscribe(onNextSpy)
|
||
|
|
||
|
setTimeout(() => {
|
||
|
expect(onNextSpy).to.has.been.called.with('test')
|
||
|
expect(onNextSpy).to.has.been.called.exactly(2)
|
||
|
done()
|
||
|
}, 100)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe("#then()", () => {
|
||
|
|
||
|
it("should resolve", (done) => {
|
||
|
const onCompleteSpy = spy()
|
||
|
const onFinallySpy = spy()
|
||
|
const subscribible = new SubscribablePromise(observer => {
|
||
|
setTimeout(() => observer.next('test'), 10)
|
||
|
setTimeout(() => observer.complete('test'), 20)
|
||
|
})
|
||
|
|
||
|
subscribible
|
||
|
.then(onCompleteSpy)
|
||
|
.finally(onFinallySpy)
|
||
|
|
||
|
setTimeout(() => {
|
||
|
expect(onCompleteSpy).to.has.been.called.with('test')
|
||
|
expect(onCompleteSpy).to.has.been.called.exactly(1)
|
||
|
expect(onFinallySpy).to.has.been.called.exactly(1)
|
||
|
done()
|
||
|
}, 100)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe("#error()", () => {
|
||
|
|
||
|
it("should catch the error", (done) => {
|
||
|
const onErrorSpy = spy()
|
||
|
const onFinallySpy = spy()
|
||
|
const subscribible = new SubscribablePromise(observer => {
|
||
|
setTimeout(() => observer.next('test'), 10)
|
||
|
setTimeout(() => observer.error('test'), 20)
|
||
|
})
|
||
|
|
||
|
subscribible
|
||
|
.catch(onErrorSpy)
|
||
|
.finally(onFinallySpy)
|
||
|
|
||
|
setTimeout(() => {
|
||
|
expect(onErrorSpy).to.has.been.called.with('test')
|
||
|
expect(onErrorSpy).to.has.been.called.exactly(1)
|
||
|
expect(onFinallySpy).to.has.been.called.exactly(1)
|
||
|
done()
|
||
|
}, 100)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
it("should be able to subscribe and wait for a promise", async () => {
|
||
|
const onNextSpy = spy()
|
||
|
const subscribible = new SubscribablePromise(observer => {
|
||
|
setTimeout(() => observer.next('test'), 10)
|
||
|
setTimeout(() => observer.next('test'), 20)
|
||
|
setTimeout(() => observer.complete('completed'), 30)
|
||
|
})
|
||
|
|
||
|
const result = await subscribible
|
||
|
.next(onNextSpy)
|
||
|
|
||
|
expect(onNextSpy).to.has.been.called.with('test')
|
||
|
expect(onNextSpy).to.has.been.called.exactly(2)
|
||
|
|
||
|
assert.equal(result, 'completed')
|
||
|
})
|
||
|
|
||
|
it("should use the result of a the promise as executor to complete the observer", async () => {
|
||
|
const onNextSpy = spy()
|
||
|
const subscribible = new SubscribablePromise(async observer => {
|
||
|
await new Promise(resolve => setTimeout(resolve, 10))
|
||
|
observer.next('test')
|
||
|
await new Promise(resolve => setTimeout(resolve, 10))
|
||
|
observer.next('test')
|
||
|
await new Promise(resolve => setTimeout(resolve, 10))
|
||
|
return 'completed'
|
||
|
})
|
||
|
|
||
|
const result = await subscribible
|
||
|
.next(onNextSpy)
|
||
|
|
||
|
expect(onNextSpy).to.has.been.called.with('test')
|
||
|
expect(onNextSpy).to.has.been.called.exactly(2)
|
||
|
|
||
|
assert.equal(result, 'completed')
|
||
|
})
|
||
|
})
|