133 lines
4.4 KiB
TypeScript
Executable File
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
|
|
}
|
|
}
|
|
)
|