Skip to content

Commit 3240646

Browse files
committed
test: add tests for disconnect behavior
1 parent 6decffe commit 3240646

File tree

1 file changed

+46
-6
lines changed

1 file changed

+46
-6
lines changed

packages/realtime_client/test/socket_test.dart

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,15 @@ void main() {
5151

5252
setUp(() async {
5353
mockServer = await HttpServer.bind('localhost', 0);
54+
WebSocketChannel? channel;
55+
5456
mockServer.transform(WebSocketTransformer()).listen((webSocket) {
55-
final channel = IOWebSocketChannel(webSocket);
56-
channel.stream.listen((request) {
57-
channel.sink.add(request);
57+
channel = IOWebSocketChannel(webSocket);
58+
channel!.stream.listen((request) {
59+
channel!.sink.add(request);
5860
});
61+
}, onDone: () {
62+
channel?.sink.close();
5963
});
6064
});
6165

@@ -170,11 +174,15 @@ void main() {
170174
socket.disconnect();
171175
});
172176

173-
test('establishes websocket connection with endpoint', () {
174-
socket.connect();
177+
test('establishes websocket connection with endpoint', () async {
178+
final connFuture = socket.connect();
179+
expect(socket.connState, SocketStates.connecting);
175180

176181
final conn = socket.conn;
177182

183+
await connFuture;
184+
expect(socket.connState, SocketStates.open);
185+
178186
expect(conn, isA<IOWebSocketChannel>());
179187
//! Not verifying connection url
180188
});
@@ -239,9 +247,11 @@ void main() {
239247

240248
test('removes existing connection', () async {
241249
await socket.connect();
250+
251+
expect(socket.conn, isNotNull);
242252
await socket.disconnect();
243253

244-
expect(socket.conn, null);
254+
expect(socket.conn, isNull);
245255
});
246256

247257
test('calls callback', () async {
@@ -284,6 +294,36 @@ void main() {
284294
).called(1);
285295
});
286296

297+
test('disconnecting a closed connections stays closed', () async {
298+
await socket.connect();
299+
expect(socket.connState, SocketStates.open);
300+
await mockServer.close();
301+
await Future.delayed(const Duration(milliseconds: 200));
302+
expect(socket.connState, SocketStates.closed);
303+
expect(socket.conn, isNotNull);
304+
305+
final disconnectFuture = socket.disconnect();
306+
307+
// `connState` stays `closed` during disconnect
308+
expect(socket.connState, SocketStates.closed);
309+
await disconnectFuture;
310+
expect(socket.connState, SocketStates.closed);
311+
expect(socket.conn, isNull);
312+
});
313+
314+
test('disconnecting an open connection', () async {
315+
await socket.connect();
316+
expect(socket.connState, SocketStates.open);
317+
318+
final disconnectFuture = socket.disconnect();
319+
320+
// `connState` stays `closed` during disconnect
321+
expect(socket.connState, SocketStates.disconnecting);
322+
await disconnectFuture;
323+
expect(socket.connState, SocketStates.disconnected);
324+
expect(socket.conn, isNull);
325+
});
326+
287327
test('does not throw when no connection', () {
288328
expect(() => socket.disconnect(), returnsNormally);
289329
});

0 commit comments

Comments
 (0)