import { describe, expect, test } from 'bun:test' import { withResolvers } from '../withResolvers' describe('withResolvers', () => { test('returns object with promise, resolve, reject', () => { const result = withResolvers() expect(result).toHaveProperty('promise') expect(result).toHaveProperty('resolve') expect(result).toHaveProperty('reject') expect(typeof result.resolve).toBe('function') expect(typeof result.reject).toBe('function') }) test('promise resolves when resolve is called', async () => { const { promise, resolve } = withResolvers() resolve('hello') const result = await promise expect(result).toBe('hello') }) test('promise rejects when reject is called', async () => { const { promise, reject } = withResolvers() reject(new Error('fail')) await expect(promise).rejects.toThrow('fail') }) test('resolve passes value through', async () => { const { promise, resolve } = withResolvers() resolve(42) expect(await promise).toBe(42) }) test('reject passes error through', async () => { const { promise, reject } = withResolvers() const err = new Error('custom error') reject(err) await expect(promise).rejects.toBe(err) }) test('promise is instanceof Promise', () => { const { promise } = withResolvers() expect(promise).toBeInstanceOf(Promise) }) test('works with generic type parameter', async () => { const { promise, resolve } = withResolvers<{ name: string }>() resolve({ name: 'test' }) const result = await promise expect(result.name).toBe('test') }) test('resolve/reject can be called asynchronously', async () => { const { promise, resolve } = withResolvers() setTimeout(() => resolve(99), 10) const result = await promise expect(result).toBe(99) }) })