/**
 * @license
 * Copyright 2026 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { TestRig } from './test-helper.js';
import { join } from 'node:path';

describe('web-fetch rate limiting', () => {
  let rig: TestRig;

  beforeEach(() => {
    rig = new TestRig();
  });

  afterEach(async () => {
    if (rig) {
      await rig.cleanup();
    }
  });

  it('should rate limit multiple requests to the same host', async () => {
    rig.setup('web-fetch rate limit', {
      settings: { tools: { core: ['web_fetch'] } },
      fakeResponsesPath: join(
        import.meta.dirname,
        'concurrency-limit.responses',
      ),
    });

    const result = await rig.run({
      args: `Fetch 11 pages from example.com`,
    });

    // We expect to find at least one tool call that failed with a rate limit error.
    const toolLogs = rig.readToolLogs();
    const rateLimitedCalls = toolLogs.filter(
      (log) =>
        log.toolRequest.name === 'web_fetch' &&
        (
          ('error' in log.toolRequest
            ? (log.toolRequest as unknown as Record<string, string>)['error']
            : '') as string
        )?.includes('Rate limit exceeded'),
    );

    expect(rateLimitedCalls.length).toBeGreaterThan(0);
    expect(result).toContain('Rate limit exceeded');
  });
});
