diff --git a/packages/realtime_client/lib/src/realtime_channel.dart b/packages/realtime_client/lib/src/realtime_channel.dart index 42a2470c..3212eb2d 100644 --- a/packages/realtime_client/lib/src/realtime_channel.dart +++ b/packages/realtime_client/lib/src/realtime_channel.dart @@ -70,7 +70,7 @@ class RealtimeChannel { socket.remove(this); }); - _onError((String? reason) { + _onError((reason) { if (isLeaving || isClosed) { return; } @@ -260,9 +260,9 @@ class RealtimeChannel { } /// Registers a callback that will be executed when the channel encounteres an error. - void _onError(void Function(String?) callback) { + void _onError(Function callback) { onEvents(ChannelEvents.error.eventName(), ChannelFilter(), - (reason, [ref]) => callback(reason?.toString())); + (reason, [ref]) => callback(reason)); } /// Sets up a listener on your Supabase database. diff --git a/packages/realtime_client/lib/src/realtime_client.dart b/packages/realtime_client/lib/src/realtime_client.dart index 5529029e..de4ea76c 100644 --- a/packages/realtime_client/lib/src/realtime_client.dart +++ b/packages/realtime_client/lib/src/realtime_client.dart @@ -48,7 +48,7 @@ class RealtimeCloseEvent { @override String toString() { - return 'RealtimeCloseEvent{code: $code, reason: $reason}'; + return 'RealtimeCloseEvent(code: $code, reason: $reason)'; } } diff --git a/packages/realtime_client/test/mock_test.dart b/packages/realtime_client/test/mock_test.dart index ccd77089..81b3b64f 100644 --- a/packages/realtime_client/test/mock_test.dart +++ b/packages/realtime_client/test/mock_test.dart @@ -268,7 +268,9 @@ void main() { final subscribeCallback = expectAsync2((RealtimeSubscribeStatus event, error) { if (event == RealtimeSubscribeStatus.channelError) { - expect(error, isNull); + expect(error, isA()); + error as RealtimeCloseEvent; + expect(error.reason, "heartbeat timeout"); } else { expect(event, RealtimeSubscribeStatus.closed); } @@ -285,6 +287,7 @@ void main() { channel.subscribe(subscribeCallback); + await Future.delayed(Duration(milliseconds: 200)); await client.conn!.sink .close(Constants.wsCloseNormal, "heartbeat timeout"); }); diff --git a/packages/realtime_client/test/socket_test.dart b/packages/realtime_client/test/socket_test.dart index 8a61d0c9..84f9eb2f 100644 --- a/packages/realtime_client/test/socket_test.dart +++ b/packages/realtime_client/test/socket_test.dart @@ -171,6 +171,7 @@ void main() { }); socket.connect(); + await Future.delayed(const Duration(milliseconds: 200)); expect(opens, 1); socket.sendHeartbeat(); @@ -229,7 +230,7 @@ void main() { expect(closes, 1); }); - test('calls connection close callback', () { + test('calls connection close callback', () async { final mockedSocketChannel = MockIOWebSocketChannel(); final mockedSocket = RealtimeClient( socketEndpoint, @@ -247,7 +248,10 @@ void main() { const tReason = 'reason'; mockedSocket.connect(); + mockedSocket.connState = SocketStates.open; + await Future.delayed(const Duration(milliseconds: 200)); mockedSocket.disconnect(code: tCode, reason: tReason); + await Future.delayed(const Duration(milliseconds: 200)); verify( () => mockedSink.close(