Files
med-notes/.pnpm-store/v10/files/07/844353b0137185438211193d76be9987efe5aec668d8a966072b920578e54b15cc1a1b614f23d32722eea65e7fee7a54b86ee84a73b5dd7c2e45b3e8250c9c
2025-05-09 05:30:08 +02:00

90 lines
2.3 KiB
Plaintext

import { describe, expect, it, vi } from 'vitest';
import makeCancellablePromise from './index.js';
vi.useFakeTimers();
describe('makeCancellablePromise()', () => {
function resolveInFiveSeconds(): Promise<string> {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Success');
}, 5000);
});
}
function rejectInFiveSeconds() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Error'));
}, 5000);
});
}
it('resolves promise if not cancelled', async () => {
const resolve = vi.fn();
const reject = vi.fn();
const { promise } = makeCancellablePromise(resolveInFiveSeconds());
vi.advanceTimersByTime(5000);
await promise.then(resolve).catch(reject);
expect(resolve).toHaveBeenCalledWith('Success');
expect(reject).not.toHaveBeenCalled();
});
it('rejects promise if not cancelled', async () => {
const resolve = vi.fn();
const reject = vi.fn();
const { promise } = makeCancellablePromise(rejectInFiveSeconds());
vi.runAllTimers();
await promise.then(resolve).catch(reject);
expect(resolve).not.toHaveBeenCalled();
expect(reject).toHaveBeenCalledWith(expect.any(Error));
});
it('does not resolve promise if cancelled', async () => {
expect.assertions(0);
const resolve = vi.fn(() => {
// Will fail because of expect.assertions(0);
expect(true).toBe(true);
});
const reject = vi.fn(() => {
// Will fail because of expect.assertions(0);
expect(true).toBe(true);
});
const { promise, cancel } = makeCancellablePromise(rejectInFiveSeconds());
promise.then(resolve).catch(reject);
vi.advanceTimersByTime(2500);
cancel();
vi.advanceTimersByTime(2500);
});
it('does not reject promise if cancelled', () => {
expect.assertions(0);
const resolve = vi.fn(() => {
// Will fail because of expect.assertions(0);
expect(true).toBe(true);
});
const reject = vi.fn(() => {
// Will fail because of expect.assertions(0);
expect(true).toBe(true);
});
const { promise, cancel } = makeCancellablePromise(rejectInFiveSeconds());
promise.then(resolve).catch(reject);
vi.advanceTimersByTime(2500);
cancel();
vi.advanceTimersByTime(2500);
});
});