diff --git a/.github/workflows/test_mock_server.yml b/.github/workflows/test_mock_server.yml new file mode 100644 index 0000000..0dd4111 --- /dev/null +++ b/.github/workflows/test_mock_server.yml @@ -0,0 +1,27 @@ +name: Test Mock Server + +on: + pull_request: + branches: + - main + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + working-directory: ./resources/mock-server + run: bun install + + - name: Run tests + working-directory: ./resources/mock-server + run: bun run test diff --git a/resources/mock-server/package.json b/resources/mock-server/package.json index 51c1c79..62edfd6 100644 --- a/resources/mock-server/package.json +++ b/resources/mock-server/package.json @@ -3,6 +3,9 @@ "module": "index.ts", "type": "module", "private": true, + "scripts": { + "test": "vitest run" + }, "devDependencies": { "@types/bun": "latest", "vitest": "^4.0.8" diff --git a/resources/mock-server/src/index.ts b/resources/mock-server/src/index.ts index 9d4017b..5bff2f3 100644 --- a/resources/mock-server/src/index.ts +++ b/resources/mock-server/src/index.ts @@ -67,14 +67,14 @@ export async function record( } } -export async function replay( +export async function replay( client: Client, - makeRequests: () => Promise -) { + makeRequests: () => Promise +): Promise { const polly = getPolly(client, { mode: "replay" }); try { - await makeRequests(); + return await makeRequests(); } finally { await polly.stop(); } diff --git a/resources/mock-server/src/server.ts b/resources/mock-server/src/server.ts index 4745e1f..74c24a1 100644 --- a/resources/mock-server/src/server.ts +++ b/resources/mock-server/src/server.ts @@ -1,6 +1,6 @@ import type { HeadersInit } from "bun"; import Fastify from "fastify"; -import { getPolly, type Client } from "./index"; +import { replay, type Client } from "./index"; import { recordAlgosdkRequests } from "./record"; export type ServerInstance = { @@ -42,8 +42,6 @@ export async function startServer(client: Client): Promise { // Catch-all proxy through PollyJS fastify.all("/*", async (request, reply) => { - const polly = getPolly(client, { mode: "replay" }); - const url = new URL( request.url, `http://localhost:${LOCALNET_PORTS[client]}` @@ -75,19 +73,21 @@ export async function startServer(client: Client): Promise { let response; try { - response = await fetch(url, { - method: request.method, - headers: request.headers as HeadersInit, - body: - request.method !== "GET" && request.method !== "HEAD" - ? JSON.stringify(request.body) - : undefined - }); + response = await replay( + client, + async () => + await fetch(url, { + method: request.method, + headers: request.headers as HeadersInit, + body: + request.method !== "GET" && request.method !== "HEAD" + ? JSON.stringify(request.body) + : undefined + }) + ); } catch (e) { reply.status(500).send(JSON.stringify(e)); return; - } finally { - await polly.stop(); } const data = await response.text();