Add retry_queue_test.dart

Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
Sahil Kumar
2021-06-14 16:56:36 +05:30
parent e2529231fd
commit 2a58ca535d
3 changed files with 98 additions and 0 deletions
@@ -177,6 +177,9 @@ class RetryQueue {
}
}
/// Whether our [_messageQueue] has messages or not
bool get hasMessages => _messageQueue.isNotEmpty;
/// Call this method to dispose this object
void dispose() {
_messageQueue.clear();
@@ -0,0 +1,74 @@
import 'package:mocktail/mocktail.dart';
import 'package:stream_chat/src/client/retry_policy.dart';
import 'package:stream_chat/src/client/retry_queue.dart';
import 'package:stream_chat/src/core/models/event.dart';
import 'package:stream_chat/src/core/models/message.dart';
import 'package:stream_chat/src/event_type.dart';
import 'package:test/scaffolding.dart';
import 'package:test/test.dart';
import '../mocks.dart';
void main() {
late final channel = MockRetryQueueChannel();
late final logger = MockLogger();
late RetryQueue retryQueue;
setUpAll(() {
final retryPolicy = RetryPolicy(
shouldRetry: (_, attempt, __) => attempt < 5,
retryTimeout: (_, attempt, __) => Duration(seconds: attempt),
);
when(() => channel.client.retryPolicy).thenReturn(retryPolicy);
when(() => channel.client.on(EventType.connectionRecovered)).thenAnswer(
(_) => Stream.value(Event(
type: EventType.connectionRecovered,
online: false,
)),
);
when(() => channel.on(any(), any(), any(), any())).thenAnswer(
(_) => Stream.value(
Event(type: EventType.any),
),
);
});
setUp(() {
retryQueue = RetryQueue(channel: channel, logger: logger);
});
tearDown(() {
retryQueue.dispose();
});
group('`.add`', () {
test('should return if message list is empty', () {
expect(() => retryQueue.add([]), returnsNormally);
verifyNever(() => logger.info(any()));
});
test('should return if queue already contains the message', () {
final message = Message(
id: 'test-message-id',
text: 'Sample message test',
);
retryQueue.add([message]);
expect(() => retryQueue.add([message]), returnsNormally);
// Called only for the first message
verify(() => logger.info('Adding 1 messages')).called(1);
});
test('`.add` should add failed request to the queue', () async {
final message = Message(
id: 'test-message-id',
text: 'Sample message test',
);
retryQueue.add([message]);
expect(retryQueue.hasMessages, isTrue);
});
});
// TODO: Add more tests once macbook is fixed :(
}
+21
View File
@@ -1,7 +1,9 @@
import 'package:dio/dio.dart';
import 'package:logging/logging.dart';
import 'package:mocktail/mocktail.dart';
import 'package:stream_chat/src/client/channel.dart';
import 'package:stream_chat/src/client/client.dart';
import 'package:stream_chat/src/client/retry_policy.dart';
import 'package:stream_chat/src/core/api/attachment_file_uploader.dart';
import 'package:stream_chat/src/core/api/channel_api.dart';
import 'package:stream_chat/src/core/api/device_api.dart';
@@ -84,3 +86,22 @@ class MockStreamChatClientWithPersistence extends Mock
}
class MockChannelConfig extends Mock implements ChannelConfig {}
class MockRetryQueueChannel extends Mock implements Channel {
final channelId = 'test-channel-id';
final channelType = 'test-channel-type';
@override
String? get id => channelId;
@override
String get type => channelType;
@override
String? get cid => '$channelType:$channelId';
StreamChatClient? _client;
@override
StreamChatClient get client => _client ??= MockStreamChatClient();
}