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
|
/// Call this method to dispose this object
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_messageQueue.clear();
|
_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:dio/dio.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:mocktail/mocktail.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/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/attachment_file_uploader.dart';
|
||||||
import 'package:stream_chat/src/core/api/channel_api.dart';
|
import 'package:stream_chat/src/core/api/channel_api.dart';
|
||||||
import 'package:stream_chat/src/core/api/device_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 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