1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00
squid-js/test/utils/SubscribablePromise.test.ts

126 lines
4.1 KiB
TypeScript
Raw Normal View History

2019-04-24 02:37:37 +02:00
import { assert, expect, spy, use } from "chai"
import * as spies from "chai-spies"
2019-04-24 13:25:37 +02:00
import { SubscribablePromise } from "../../src/utils/SubscribablePromise"
2019-04-24 02:37:37 +02:00
use(spies)
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)
2019-04-24 13:25:37 +02:00
assert.typeOf(subscription.unsubscribe, "function")
2019-04-24 02:37:37 +02:00
})
it("should listen the next values", (done) => {
const onNextSpy = spy()
2019-04-24 13:25:37 +02:00
const subscribible = new SubscribablePromise((observer) => {
setTimeout(() => observer.next("test"), 10)
setTimeout(() => observer.next("test"), 20)
2019-04-24 02:37:37 +02:00
})
subscribible.subscribe(onNextSpy)
setTimeout(() => {
2019-04-24 13:25:37 +02:00
expect(onNextSpy).to.has.been.called.with("test")
2019-04-24 02:37:37 +02:00
expect(onNextSpy).to.has.been.called.exactly(2)
done()
}, 100)
})
})
describe("#then()", () => {
it("should resolve", (done) => {
const onCompleteSpy = spy()
const onFinallySpy = spy()
2019-04-24 13:25:37 +02:00
const subscribible = new SubscribablePromise((observer) => {
setTimeout(() => observer.next("test"), 10)
setTimeout(() => observer.complete("test"), 20)
2019-04-24 02:37:37 +02:00
})
subscribible
.then(onCompleteSpy)
.finally(onFinallySpy)
setTimeout(() => {
2019-04-24 13:25:37 +02:00
expect(onCompleteSpy).to.has.been.called.with("test")
2019-04-24 02:37:37 +02:00
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()
2019-04-24 13:25:37 +02:00
const subscribible = new SubscribablePromise((observer) => {
setTimeout(() => observer.next("test"), 10)
setTimeout(() => observer.error("test"), 20)
2019-04-24 02:37:37 +02:00
})
subscribible
.catch(onErrorSpy)
.finally(onFinallySpy)
setTimeout(() => {
2019-04-24 13:25:37 +02:00
expect(onErrorSpy).to.has.been.called.with("test")
2019-04-24 02:37:37 +02:00
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()
2019-04-24 13:25:37 +02:00
const subscribible = new SubscribablePromise((observer) => {
setTimeout(() => observer.next("test"), 10)
setTimeout(() => observer.next("test"), 20)
setTimeout(() => observer.complete("completed"), 30)
2019-04-24 02:37:37 +02:00
})
const result = await subscribible
.next(onNextSpy)
2019-04-24 13:25:37 +02:00
expect(onNextSpy).to.has.been.called.with("test")
2019-04-24 02:37:37 +02:00
expect(onNextSpy).to.has.been.called.exactly(2)
2019-04-24 13:25:37 +02:00
assert.equal(result, "completed")
2019-04-24 02:37:37 +02:00
})
it("should use the result of a the promise as executor to complete the observer", async () => {
const onNextSpy = spy()
2019-04-24 13:25:37 +02:00
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"
2019-04-24 02:37:37 +02:00
})
const result = await subscribible
.next(onNextSpy)
2019-04-24 13:25:37 +02:00
expect(onNextSpy).to.has.been.called.with("test")
2019-04-24 02:37:37 +02:00
expect(onNextSpy).to.has.been.called.exactly(2)
2019-04-24 13:25:37 +02:00
assert.equal(result, "completed")
2019-04-24 02:37:37 +02:00
})
})