mirror of
https://github.com/djdevin/recflare.git
synced 2026-09-08 14:41:28 -07:00
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { cloudflareTest } from '@cloudflare/vitest-pool-workers'
|
|
import { defineConfig } from 'vitest/config'
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
cloudflareTest({
|
|
wrangler: { configPath: `${__dirname}/wrangler.jsonc` },
|
|
miniflare: {
|
|
// Stands in for the `auth` service binding wrangler.jsonc declares — the real
|
|
// worker isn't part of this project's test run, and without an override the
|
|
// runtime refuses to start ("no such service is defined"). It echoes the
|
|
// forwarded `cf-connecting-ip` back so a test can assert the browser's IP
|
|
// actually survives the hop (see src/upstream.ts `postAuthForm`); every other
|
|
// auth call in the tests fails before reaching it.
|
|
serviceBindings: {
|
|
AUTH: (request: Request) =>
|
|
new Response(
|
|
JSON.stringify({
|
|
error: 'invalid_grant',
|
|
error_description: request.headers.get('cf-connecting-ip') ?? 'no ip',
|
|
}),
|
|
{ status: 400, headers: { 'content-type': 'application/json' } }
|
|
),
|
|
},
|
|
bindings: {
|
|
ENVIRONMENT: 'VITEST',
|
|
// The Turnstile keypair is NOT bound here: both keys come from the Secrets
|
|
// Store now, and the tests seed the local store with the test pair (see
|
|
// src/test/integration/api.test.ts). A plain binding of the same name would
|
|
// shadow the store binding with a string.
|
|
},
|
|
},
|
|
}),
|
|
],
|
|
})
|