43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { describe, expect, test } from 'vitest';
|
|
|
|
import { isRateLimitError } from '../../convex/githubClient';
|
|
|
|
describe('isRateLimitError', () => {
|
|
test('detects a 403 primary rate limit via ratelimit-remaining header', () => {
|
|
expect(
|
|
isRateLimitError({
|
|
status: 403,
|
|
response: { headers: { 'x-ratelimit-remaining': '0' } },
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
test('detects a 429 status', () => {
|
|
expect(isRateLimitError({ status: 429 })).toBe(true);
|
|
});
|
|
|
|
test('detects a secondary rate limit via message', () => {
|
|
expect(
|
|
isRateLimitError({ status: 403, message: 'secondary rate limit' }),
|
|
).toBe(true);
|
|
});
|
|
|
|
test('returns false for a 404', () => {
|
|
expect(isRateLimitError({ status: 404 })).toBe(false);
|
|
});
|
|
|
|
test('returns false for a 500', () => {
|
|
expect(isRateLimitError({ status: 500 })).toBe(false);
|
|
});
|
|
|
|
test('returns false for a generic Error', () => {
|
|
expect(isRateLimitError(new Error('boom'))).toBe(false);
|
|
});
|
|
|
|
test('returns false for non-object values', () => {
|
|
expect(isRateLimitError(null)).toBe(false);
|
|
expect(isRateLimitError(undefined)).toBe(false);
|
|
expect(isRateLimitError('rate limit')).toBe(false);
|
|
});
|
|
});
|