Files
jina-ai--reader/tests/unit/proxy-provider.test.ts
wehub-resource-sync f1ba9c6c36
/ test (push) Failing after 1s
/ build-and-push-to-ghcr (push) Has been skipped
chore: import upstream snapshot with attribution
2026-07-13 12:23:39 +08:00

59 lines
2.4 KiB
TypeScript

/**
* Unit tests for ProxyProviderService error contract.
*
* The service must throw `ServiceBadApproachError` (not the more generic
* `AssertionFailureError`) when no proxy provider can serve a request.
* The crawler's `@retryWith` handler keys off this exact class to stop
* retrying — see `sideLoadWithAllocatedProxy` in `src/api/crawler.ts`.
*/
import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { ProxyProviderService } from '../../build/services/proxy-provider/index.js';
import { ServiceBadApproachError, ServiceBadAttemptError } from '../../build/services/errors.js';
function mkService(): ProxyProviderService {
// EnvConfig is only read during init(); these tests skip init() and
// exercise behavior with an empty `clients` array directly.
const fakeEnvConfig: any = {};
return new ProxyProviderService(fakeEnvConfig);
}
describe('ProxyProviderService.alloc — no clients', () => {
it('throws ServiceBadApproachError when no provider supports the country', async () => {
const svc = mkService();
await assert.rejects(() => svc.alloc('us'), (err: unknown) => {
assert.ok(err instanceof ServiceBadApproachError,
`expected ServiceBadApproachError, got ${(err as Error)?.constructor?.name}`);
return true;
});
});
it('thrown error is also a ServiceBadAttemptError (parent class)', async () => {
// ServiceBadApproachError extends ServiceBadAttemptError; downstream
// `err instanceof ServiceBadAttemptError` checks must keep working.
const svc = mkService();
await assert.rejects(() => svc.alloc('us'), (err: unknown) => {
assert.ok(err instanceof ServiceBadAttemptError);
return true;
});
});
it('error message names the country code that was requested', async () => {
const svc = mkService();
await assert.rejects(() => svc.alloc('zz'), (err: unknown) => {
assert.match((err as Error).message, /zz/);
return true;
});
});
});
describe('ProxyProviderService.loopClients — no clients', () => {
it('throws ServiceBadApproachError when invoked with an empty client list', () => {
const svc = mkService();
assert.throws(() => {
const it = svc.loopClients();
it.next();
}, ServiceBadApproachError);
});
});