Files
workavia-mail-front/test/features/offline_mode/woker_queue_test.dart
T

70 lines
2.5 KiB
Dart

@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/clients/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/hive_worker/hive_task.dart';
import 'mailbox_state_worker_queue.dart';
void main() {
late StateCacheClient stateCacheClient;
late MailboxStateWorkerQueue workerQueue;
setUpAll(() {
HiveCacheConfig.instance.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();
});
}