sangwaritaxi_website/node_modules/@jsr/supabase__supabase-js/test/deno/edge-functions-integration....

133 lines
4.4 KiB
TypeScript
Executable File

import { assertEquals, assertExists } from 'https://deno.land/std@0.220.1/assert/mod.ts'
import { createClient } from '../../dist/module/index.js'
// These tests are for integration testing with actual deployed edge functions
// To run these tests, you need to:
// 1. Deploy the edge functions to a Supabase project
// 2. Set the SUPABASE_URL and SUPABASE_ANON_KEY environment variables
// 3. Or use the local development credentials below
Deno.test(
'Edge Functions Integration Tests',
{ sanitizeOps: false, sanitizeResources: false },
async (t) => {
// Use environment variables or fall back to local development
const SUPABASE_URL = Deno.env.get('SUPABASE_URL') || 'http://127.0.0.1:54321'
const ANON_KEY =
Deno.env.get('SUPABASE_ANON_KEY') ||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0'
const supabase = createClient(SUPABASE_URL, ANON_KEY, {
realtime: { heartbeatIntervalMs: 500 },
})
try {
await t.step('hello function - should return greeting with name', async () => {
const { data, error } = await supabase.functions.invoke('hello', {
body: { name: 'Test User' },
})
assertEquals(error, null)
assertExists(data)
assertEquals(typeof data.message, 'string')
assertEquals(data.message, 'Hello Test User!')
assertEquals(typeof data.timestamp, 'string')
})
await t.step('hello function - should return default greeting without name', async () => {
const { data, error } = await supabase.functions.invoke('hello', {
body: {},
})
assertEquals(error, null)
assertExists(data)
assertEquals(typeof data.message, 'string')
assertEquals(data.message, 'Hello World!')
assertEquals(typeof data.timestamp, 'string')
})
await t.step('echo function - should echo request body', async () => {
const testData = {
message: 'Hello Echo!',
number: 42,
array: [1, 2, 3],
nested: { key: 'value' },
}
const { data, error } = await supabase.functions.invoke('echo', {
body: testData,
})
assertEquals(error, null)
assertExists(data)
assertEquals(data.echo, testData)
assertEquals(typeof data.method, 'string')
assertEquals(typeof data.url, 'string')
assertEquals(typeof data.timestamp, 'string')
})
await t.step('status function - should return system status', async () => {
const { data, error } = await supabase.functions.invoke('status', {
body: {},
})
assertEquals(error, null)
assertExists(data)
assertEquals(data.status, 'ok')
assertEquals(typeof data.timestamp, 'string')
assertEquals(typeof data.environment, 'string')
assertEquals(data.version, '1.0.0')
assertEquals(typeof data.uptime, 'number')
})
await t.step('should handle non-existent function', async () => {
const { data, error } = await supabase.functions.invoke('non-existent-function', {
body: {},
})
assertExists(error)
assertEquals(data, null)
})
await t.step('should handle concurrent function calls', async () => {
const promises = Array.from({ length: 5 }, (_, i) =>
supabase.functions.invoke('hello', {
body: { name: `Concurrent Test ${i}` },
})
)
const results = await Promise.all(promises)
// Check if any functions are deployed
const hasDeployedFunctions = results.some(({ error }) => !error)
if (!hasDeployedFunctions) {
console.log('No functions deployed, skipping concurrent execution test')
return
}
results.forEach(({ data, error }) => {
if (!error) {
assertEquals(error, null)
assertExists(data)
assertEquals(typeof data.message, 'string')
assertEquals(typeof data.timestamp, 'string')
}
})
})
await t.step('should handle function errors gracefully', async () => {
const { data, error } = await supabase.functions.invoke('hello', {
body: 'invalid json',
})
assertExists(error)
assertEquals(data, null)
})
} catch (error) {
console.error('Test error:', error)
throw error
}
}
)