import * as smartpromise from '../ts/index.js'; import { tap, expect } from '@push.rocks/tapbundle'; tap.test('simple deferred should resolve with correct value', async () => { const done = smartpromise.defer(); let result: string | undefined; done.promise.then((stringArg) => { result = stringArg; }); done.resolve('hello'); await done.promise; expect(result).toEqual('hello'); }); tap.test('deferred should work with async functions and track status/duration', async () => { const myAsyncFunction = async (): Promise => { const done = smartpromise.defer(); setTimeout(() => { done.resolve('hi'); }, 100); // reduced timeout for testing expect(done.status).toEqual('pending'); await done.promise; expect(done.status).toEqual('fulfilled'); expect(done.duration).toBeGreaterThan(0); return done.promise; }; const result = await myAsyncFunction(); expect(result).toEqual('hi'); }); tap.test('resolvedPromise should resolve immediately with correct value', async () => { const message = `I'll get logged to console soon`; const result = await smartpromise.resolvedPromise(message); expect(result).toEqual(message); }); tap.test('rejectedPromise should reject with correct error message', async () => { const errorMessage = 'what a lovely error message'; let caught = false; try { await smartpromise.rejectedPromise(errorMessage); } catch (err) { caught = true; expect(err).toEqual(errorMessage); } expect(caught).toEqual(true); }); export default tap.start();