40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
isInactiveSseRequest,
|
|
readSseRequestError,
|
|
SseRequestError,
|
|
} from './sseRequestLifecycle';
|
|
|
|
describe('sseRequestLifecycle', () => {
|
|
it('treats an explicit abort as an inactive request', () => {
|
|
const controller = new AbortController();
|
|
controller.abort();
|
|
|
|
expect(isInactiveSseRequest(controller.signal, 1, 1)).toBe(true);
|
|
});
|
|
|
|
it('treats a superseded request as inactive', () => {
|
|
const controller = new AbortController();
|
|
|
|
expect(isInactiveSseRequest(controller.signal, 2, 1)).toBe(true);
|
|
expect(isInactiveSseRequest(controller.signal, 1, 1)).toBe(false);
|
|
});
|
|
});
|
|
|
|
it('keeps HTTP rejection distinguishable from transport interruption', async () => {
|
|
for (const status of [400, 403, 500]) {
|
|
const error = await readSseRequestError(
|
|
new Response(JSON.stringify({ message: '运行请求被拒绝' }), { status }),
|
|
);
|
|
expect(error).toBeInstanceOf(SseRequestError);
|
|
expect(error.status).toBe(status);
|
|
expect(error.message).toBe('运行请求被拒绝');
|
|
}
|
|
const error = await readSseRequestError(
|
|
new Response('<html>PRIVATE_GATEWAY_BODY</html>', { status: 502 }),
|
|
);
|
|
expect(error.message).toContain('502');
|
|
expect(error.message).not.toContain('PRIVATE_GATEWAY_BODY');
|
|
});
|