@primno/core
Version:
Front-end framework for Model-Driven Apps of Power Apps and Dynamics 365.
80 lines (68 loc) • 2.24 kB
text/typescript
import { isPromise, MaybePromise } from "../../src/utils";
describe("Utils MaybePromise", () => {
it("must return promise", async () => {
const result = MaybePromise.new(() => true)
.then(async (value) => {
if (value === true)
return "ok";
else
return "ko"
})
.done();
expect(isPromise(result)).toBe(true);
expect((await result)).toBe("ok");
});
it("must return promise 2", async () => {
const result = MaybePromise.new(async () => true)
.then((value) => {
if (value === true)
return "ok";
else
return "ko"
})
.done();
expect(isPromise(result)).toBe(true);
expect(await result).toBe("ok");
});
it("must not return promise", () => {
const result = MaybePromise.new(() => true)
.then((value: boolean) => {
if (value === true)
return "ok";
else
return "ko"
})
.done();
expect(isPromise(result)).toBe(false);
expect(result).toBe("ok");
});
it("must throw sync 1", () => {
let except: any = null;
let value = "initial";
const result = MaybePromise.new(() => { value = "updated"; })
.then(() => { throw "error1" })
.then(() => except = null)
.then(() => { throw "error2" })
.catch((e) => except = e)
.done();
expect(except).not.toBe(null);
expect(except).toBe("error1");
expect(result).toBe(undefined);
expect(value).toBe("updated");
});
it("must throw async 1", async (): Promise<void> => {
let except: any = null;
let value = "initial";
return MaybePromise.new(async () => { value = "updated"; })
.then(() => { throw "error1" })
.then(() => except = null)
.then(() => { throw "error2"; })
.catch((e) => { except = e; })
.done()
.then((result) => {
expect(except).not.toBe(null);
expect(except).toBe("error1");
expect(result).toBe(undefined);
});
});
})