282 lines · 11.7 KB
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import { Client, StreamableHTTPClientTransport } from "@modelcontextprotocol/client";
import {
  approveConsent,
  BASE,
  body,
  call,
  MODERN,
  patClient,
  quote,
  agentToken,
  seedToken,
  seedWorld,
  sha256Hex,
  sql,
  sqlRows,
  teardown,
  TestOAuthProvider,
  toolText,
} from "./mcp-helpers";
import type { World } from "./mcp-helpers";

let world: World;

beforeAll(async () => {
  world = await seedWorld();
}, 120_000);

afterAll(async () => {
  await teardown(world);
});

describe("authorization", () => {
  test("advertises protected resource and authorization server metadata", async () => {
    const prm = await body<{ resource: string }>(await fetch(`${BASE}/.well-known/oauth-protected-resource/mcp`));
    expect(prm.resource).toBe(`${BASE}/mcp`);
    const as = await body<{ code_challenge_methods_supported: string[]; registration_endpoint: string }>(
      await fetch(`${BASE}/.well-known/oauth-authorization-server`),
    );
    expect(as.code_challenge_methods_supported).toEqual(["S256"]);