Add retry_queue_test.dart
Signed-off-by: Sahil Kumar <[email protected]>
This commit is contained in:
@@ -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 :(
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user