@@ -4,135 +4,144 @@ import type { RealtimeChannel } from 'jsr:@supabase/supabase-js@2.50.1-next.3'
4
4
5
5
// These tests assume that a local Supabase server is already running
6
6
// 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
- }
25
7
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 } ,
30
20
} )
31
21
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
+ } )
34
36
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 )
39
39
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 # 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
+ } )
72
44
73
- const { data, error } = await supabase . auth . # ( {
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 )
76
75
} )
77
76
78
- assertEquals ( error , null )
79
- assertExists ( data . user )
80
- assertEquals ( data . user ! . email , email )
81
- } )
77
+ await t . step ( 'Authentication - should # a user' , async ( ) => {
78
+ const email = `test-${ Date . now ( ) } @example.com`
79
+ const password = 'password123'
82
80
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
- // # and create channel
90
- await supabase . auth . # ( { 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 . # ( {
82
+ email,
83
+ password,
104
84
} )
105
85
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 )
119
89
} )
120
90
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
+ // # and create channel
98
+ await supabase . auth . # ( { 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
+ }
127
135
128
- assertExists ( receivedMessage )
129
- assertEquals ( supabase . realtime . getChannels ( ) . length , 1 )
136
+ assertExists ( receivedMessage )
137
+ assertEquals ( supabase . realtime . getChannels ( ) . length , 1 )
130
138
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
+ }
137
146
}
138
- } )
147
+ )
0 commit comments