TF-1821 Write unit test for worker queue

(cherry picked from commit 2d1533194967ebc472e9fb236f917e49e1aa52ab)
This commit is contained in:
dab246
2023-05-08 18:15:12 +07:00
committed by Dat Vu
parent ba4d53a833
commit f96cd43b95
2 changed files with 78 additions and 0 deletions
@@ -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();
});
}