@@ -4,135 +4,144 @@ import type { RealtimeChannel } from 'jsr:@supabase/
[email protected] '
44
55// These tests assume that a local Supabase server is already running
66// Start a local Supabase instance with 'supabase start' before running these tests
7- Deno . test ( 'Supabase Integration Tests' , async ( t ) => {
8- // Default local dev credentials from Supabase CLI
9- const SUPABASE_URL = 'http://127.0.0.1:54321'
10- const ANON_KEY =
11- 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0'
12-
13- const supabase = createClient ( SUPABASE_URL , ANON_KEY , {
14- realtime : { heartbeatIntervalMs : 500 } ,
15- } )
16-
17- // Cleanup function to be called after all tests
18- const cleanup = async ( ) => {
19- await supabase . auth . signOut ( )
20- await supabase . auth . stopAutoRefresh ( )
21- await supabase . removeAllChannels ( )
22- // Give some time for cleanup to complete
23- await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
24- }
257
26- try {
27- await t . step ( 'should connect to Supabase instance' , ( ) => {
28- assertExists ( supabase )
29- assertEquals ( supabase instanceof SupabaseClient , true )
8+ // TODO: Remove sanitizeOps and sanitizeResources once the issue is fixed
9+ Deno . test (
10+ 'Supabase Integration Tests' ,
11+ { sanitizeOps : false , sanitizeResources : false } ,
12+ async ( t ) => {
13+ // Default local dev credentials from Supabase CLI
14+ const SUPABASE_URL = 'http://127.0.0.1:54321'
15+ const ANON_KEY =
16+ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0'
17+
18+ const supabase = createClient ( SUPABASE_URL , ANON_KEY , {
19+ realtime : { heartbeatIntervalMs : 500 } ,
3020 } )
3121
32- await t . step ( 'PostgREST - should query data from public schema' , async ( ) => {
33- const { data, error } = await supabase . from ( 'todos' ) . select ( '*' ) . limit ( 5 )
22+ // Cleanup function to be called after all tests
23+ const cleanup = async ( ) => {
24+ await supabase . auth . signOut ( )
25+ await supabase . auth . stopAutoRefresh ( )
26+ await supabase . removeAllChannels ( )
27+ // Give some time for cleanup to complete
28+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
29+ }
30+
31+ try {
32+ await t . step ( 'should connect to Supabase instance' , ( ) => {
33+ assertExists ( supabase )
34+ assertEquals ( supabase instanceof SupabaseClient , true )
35+ } )
3436
35- // The default schema includes a 'todos' table, but it might be empty
36- assertEquals ( error , null )
37- assertEquals ( Array . isArray ( data ) , true )
38- } )
37+ await t . step ( 'PostgREST - should query data from public schema' , async ( ) => {
38+ const { data, error } = await supabase . from ( 'todos' ) . select ( '*' ) . limit ( 5 )
3939
40- await t . step ( 'PostgREST - should create and delete a todo' , async ( ) => {
41- // Create a new todo
42- const { data : createdTodo , error : createError } = await supabase
43- . from ( 'todos' )
44- . insert ( { task : 'Integration Test Todo' , is_complete : false } )
45- . select ( )
46- . single ( )
47-
48- assertEquals ( createError , null )
49- assertExists ( createdTodo )
50- assertEquals ( createdTodo ! . task , 'Integration Test Todo' )
51- assertEquals ( createdTodo ! . is_complete , false )
52-
53- // Delete the created todo
54- const { error : deleteError } = await supabase . from ( 'todos' ) . delete ( ) . eq ( 'id' , createdTodo ! . id )
55-
56- assertEquals ( deleteError , null )
57-
58- // Verify the todo was deleted
59- const { data : fetchedTodo , error : fetchError } = await supabase
60- . from ( 'todos' )
61- . select ( '*' )
62- . eq ( 'id' , createdTodo ! . id )
63- . single ( )
64-
65- assertExists ( fetchError )
66- assertEquals ( fetchedTodo , null )
67- } )
68-
69- await t . step ( 'Authentication - should sign up a user' , async ( ) => {
70- const email = `test-${ Date . now ( ) } @example.com`
71- const password = 'password123'
40+ // The default schema includes a 'todos' table, but it might be empty
41+ assertEquals ( error , null )
42+ assertEquals ( Array . isArray ( data ) , true )
43+ } )
7244
73- const { data, error } = await supabase . auth . signUp ( {
74- email,
75- password,
45+ await t . step ( 'PostgREST - should create and delete a todo' , async ( ) => {
46+ // Create a new todo
47+ const { data : createdTodo , error : createError } = await supabase
48+ . from ( 'todos' )
49+ . insert ( { task : 'Integration Test Todo' , is_complete : false } )
50+ . select ( )
51+ . single ( )
52+
53+ assertEquals ( createError , null )
54+ assertExists ( createdTodo )
55+ assertEquals ( createdTodo ! . task , 'Integration Test Todo' )
56+ assertEquals ( createdTodo ! . is_complete , false )
57+
58+ // Delete the created todo
59+ const { error : deleteError } = await supabase
60+ . from ( 'todos' )
61+ . delete ( )
62+ . eq ( 'id' , createdTodo ! . id )
63+
64+ assertEquals ( deleteError , null )
65+
66+ // Verify the todo was deleted
67+ const { data : fetchedTodo , error : fetchError } = await supabase
68+ . from ( 'todos' )
69+ . select ( '*' )
70+ . eq ( 'id' , createdTodo ! . id )
71+ . single ( )
72+
73+ assertExists ( fetchError )
74+ assertEquals ( fetchedTodo , null )
7675 } )
7776
78- assertEquals ( error , null )
79- assertExists ( data . user )
80- assertEquals ( data . user ! . email , email )
81- } )
77+ await t . step ( 'Authentication - should sign up a user' , async ( ) => {
78+ const email = `test-${ Date . now ( ) } @example.com`
79+ const password = 'password123'
8280
83- await t . step ( 'Realtime - is able to connect and broadcast' , async ( ) => {
84- const channelName = `channel-${ crypto . randomUUID ( ) } `
85- let channel : RealtimeChannel
86- const email = `test-${ Date . now ( ) } @example.com`
87- const password = 'password123'
88-
89- // Sign up and create channel
90- await supabase . auth . signUp ( { email, password } )
91- const config = { broadcast : { self : true } , private : true }
92- channel = supabase . channel ( channelName , { config } )
93- await supabase . realtime . setAuth ( )
94-
95- const testMessage = { message : 'test' }
96- let receivedMessage : any
97- let subscribed = false
98- let attempts = 0
99-
100- channel
101- . on ( 'broadcast' , { event : '*' } , ( payload : unknown ) => ( receivedMessage = payload ) )
102- . subscribe ( ( status : string ) => {
103- if ( status == 'SUBSCRIBED' ) subscribed = true
81+ const { data, error } = await supabase . auth . signUp ( {
82+ email,
83+ password,
10484 } )
10585
106- // Wait for subscription
107- while ( ! subscribed ) {
108- if ( attempts > 50 ) throw new Error ( 'Timeout waiting for subscription' )
109- await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
110- attempts ++
111- }
112-
113- attempts = 0
114-
115- channel . send ( {
116- type : 'broadcast' ,
117- event : 'test-event' ,
118- payload : testMessage ,
86+ assertEquals ( error , null )
87+ assertExists ( data . user )
88+ assertEquals ( data . user ! . email , email )
11989 } )
12090
121- // Wait on message
122- while ( ! receivedMessage ) {
123- if ( attempts > 50 ) throw new Error ( 'Timeout waiting for message' )
124- await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
125- attempts ++
126- }
91+ await t . step ( 'Realtime - is able to connect and broadcast' , async ( ) => {
92+ const channelName = `channel-${ crypto . randomUUID ( ) } `
93+ let channel : RealtimeChannel
94+ const email = `test-${ Date . now ( ) } @example.com`
95+ const password = 'password123'
96+
97+ // Sign up and create channel
98+ await supabase . auth . signUp ( { email, password } )
99+ const config = { broadcast : { self : true } , private : true }
100+ channel = supabase . channel ( channelName , { config } )
101+ await supabase . realtime . setAuth ( )
102+
103+ const testMessage = { message : 'test' }
104+ let receivedMessage : any
105+ let subscribed = false
106+ let attempts = 0
107+
108+ channel
109+ . on ( 'broadcast' , { event : '*' } , ( payload : unknown ) => ( receivedMessage = payload ) )
110+ . subscribe ( ( status : string ) => {
111+ if ( status == 'SUBSCRIBED' ) subscribed = true
112+ } )
113+
114+ // Wait for subscription
115+ while ( ! subscribed ) {
116+ if ( attempts > 50 ) throw new Error ( 'Timeout waiting for subscription' )
117+ await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
118+ attempts ++
119+ }
120+
121+ attempts = 0
122+
123+ channel . send ( {
124+ type : 'broadcast' ,
125+ event : 'test-event' ,
126+ payload : testMessage ,
127+ } )
128+
129+ // Wait on message
130+ while ( ! receivedMessage ) {
131+ if ( attempts > 50 ) throw new Error ( 'Timeout waiting for message' )
132+ await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
133+ attempts ++
134+ }
127135
128- assertExists ( receivedMessage )
129- assertEquals ( supabase . realtime . getChannels ( ) . length , 1 )
136+ assertExists ( receivedMessage )
137+ assertEquals ( supabase . realtime . getChannels ( ) . length , 1 )
130138
131- // Cleanup channel
132- await channel . unsubscribe ( )
133- } )
134- } finally {
135- // Ensure cleanup runs even if tests fail
136- await cleanup ( )
139+ // Cleanup channel
140+ await channel . unsubscribe ( )
141+ } )
142+ } finally {
143+ // Ensure cleanup runs even if tests fail
144+ await cleanup ( )
145+ }
137146 }
138- } )
147+ )
0 commit comments