TF-1821 Write unit test for worker queue
(cherry picked from commit 2d1533194967ebc472e9fb236f917e49e1aa52ab)
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
|
||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_worker_queue.dart';
|
||||
|
||||
class MailboxStateWorkerQueue extends WorkerQueue {
|
||||
|
||||
@override
|
||||
String get workerName => 'MailboxStateWorkerQueue';
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
@TestOn('vm')
|
||||
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||
import 'package:tmail_ui_user/features/caching/config/hive_cache_config.dart';
|
||||
import 'package:tmail_ui_user/features/caching/state_cache_client.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/data/extensions/state_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/data/model/state_type.dart';
|
||||
import 'package:tmail_ui_user/features/offline_mode/worker/hive_task.dart';
|
||||
|
||||
import 'mailbox_state_worker_queue.dart';
|
||||
|
||||
void main() {
|
||||
late StateCacheClient stateCacheClient;
|
||||
late MailboxStateWorkerQueue workerQueue;
|
||||
|
||||
setUpAll(() {
|
||||
HiveCacheConfig().setUp(cachePath: Directory.current.path);
|
||||
});
|
||||
|
||||
setUp(() {
|
||||
stateCacheClient = StateCacheClient();
|
||||
workerQueue = MailboxStateWorkerQueue();
|
||||
});
|
||||
|
||||
HiveTask generateTask(String key, State value) {
|
||||
return HiveTask(
|
||||
id: key,
|
||||
runnable: () async {
|
||||
final stateCache = value.toStateCache(StateType.mailbox);
|
||||
await stateCacheClient.insertItem(key, stateCache);
|
||||
},
|
||||
conditionInvoked: () async {
|
||||
final listState = await stateCacheClient.getAll();
|
||||
return listState.length < 2;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
group('mailbox_state_worker_queue test', () {
|
||||
test('stateCacheClient should contain only 2 elements when performing 4 more tasks in the queue at the same time.', () async {
|
||||
await stateCacheClient.clearAllData();
|
||||
final stateCacheStart = await stateCacheClient.getAll();
|
||||
log('main():mailbox_state_worker_queue:stateCacheStart: $stateCacheStart | Length: ${stateCacheStart.length}');
|
||||
await Future.delayed(const Duration(seconds: 5));
|
||||
|
||||
await Future.wait([
|
||||
workerQueue.addTask(generateTask('Task1', State('value1'))),
|
||||
workerQueue.addTask(generateTask('Task2', State('value2'))),
|
||||
workerQueue.addTask(generateTask('Task3', State('value3'))),
|
||||
workerQueue.addTask(generateTask('Task4', State('value4')))
|
||||
], eagerError: true);
|
||||
|
||||
await Future.delayed(const Duration(seconds: 5));
|
||||
|
||||
await workerQueue.release();
|
||||
|
||||
final stateCacheEnd = await stateCacheClient.getAll();
|
||||
log('main():mailbox_state_worker_queue::stateCacheEnd: $stateCacheEnd | Length: ${stateCacheEnd.length}');
|
||||
expect(stateCacheEnd.length, equals(2));
|
||||
});
|
||||
});
|
||||
|
||||
tearDown(() async {
|
||||
await stateCacheClient.deleteBox();
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user