Files
supabase/e2e/studio/features/edge-functions.spec.ts
Vaibhav 83e6552d71 fix: preserve function responses (#47920)
- adds up to: https://github.com/supabase/cli/pull/5862

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added an “Error docs” link in Edge Function testing UI when an
`sb-error-code` header is present.

* **Bug Fixes**
* Improved the Edge Function test proxy to consistently preserve
upstream status, headers (including repeated headers), and response
bodies without transformation.
* Enhanced handling for invalid function URLs and upstream fetch
failures.

* **Tests**
* Added unit, API, and Playwright E2E coverage for error docs linking
and response proxy behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-20 18:58:30 +01:00

62 lines
2.0 KiB
TypeScript

import { expect } from '@playwright/test'
import { test } from '../utils/test.js'
import { toUrl } from '../utils/to-url.js'
const FUNCTION_SLUG = 'error-code-docs'
test.describe('Edge Functions', () => {
test('links an sb-error-code response to its documentation', async ({ page, ref }) => {
await page.route(`**/api/v1/projects/${ref}/functions/${FUNCTION_SLUG}`, async (route) => {
const timestamp = Date.now()
await route.fulfill({
contentType: 'application/json',
body: JSON.stringify({
id: '00000000-0000-0000-0000-000000000000',
slug: FUNCTION_SLUG,
name: FUNCTION_SLUG,
version: 1,
status: 'ACTIVE',
entrypoint_path: `supabase/functions/${FUNCTION_SLUG}/index.ts`,
created_at: timestamp,
updated_at: timestamp,
}),
})
})
await page.route('**/api/edge-functions/test', async (route) => {
await route.fulfill({
contentType: 'application/json',
body: JSON.stringify({
status: 401,
headers: { 'sb-error-code': 'UNAUTHORIZED_INVALID_JWT_FORMAT' },
body: '',
}),
})
})
await page.goto(toUrl(`/project/${ref}/functions/${FUNCTION_SLUG}`))
await page.getByRole('button', { name: 'Test', exact: true }).click()
const testResponse = page.waitForResponse(
(response) =>
response.url().includes('/api/edge-functions/test') &&
response.request().method() === 'POST'
)
await page.getByRole('button', { name: 'Send Request' }).click()
expect(
(await testResponse).ok(),
'Studio proxy should return a successful response envelope'
).toBeTruthy()
await expect(
page.getByRole('link', {
name: 'View documentation for UNAUTHORIZED_INVALID_JWT_FORMAT (opens in new tab)',
}),
'Error response should link to its documentation section'
).toHaveAttribute(
'href',
'https://supabase.com/docs/guides/functions/error-codes#unauthorizedinvalidjwtformat'
)
})
})