42 lines
1.1 KiB
Dart
42 lines
1.1 KiB
Dart
import 'dart:io';
|
|
import 'dart:math';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:path/path.dart' as p;
|
|
import 'package:receipity/services/product_repository.dart';
|
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
|
|
|
var _dbSeq = 0;
|
|
var _sqliteReady = false;
|
|
|
|
void ensureTestSqlite() {
|
|
if (_sqliteReady) return;
|
|
sqfliteFfiInit();
|
|
databaseFactory = databaseFactoryFfi;
|
|
_sqliteReady = true;
|
|
}
|
|
|
|
ProductRepository memoryRepository() {
|
|
ensureTestSqlite();
|
|
final dir = Directory(p.join('.dart_tool', 'receipity_test_db'))
|
|
..createSync(recursive: true);
|
|
final name =
|
|
'db_${DateTime.now().microsecondsSinceEpoch}_${_dbSeq++}_${Random().nextInt(1 << 32)}.sqlite';
|
|
return ProductRepository(databasePath: p.join(dir.path, name));
|
|
}
|
|
|
|
Future<void> pumpUntilFound(
|
|
WidgetTester tester,
|
|
Finder finder, {
|
|
int attempts = 40,
|
|
}) async {
|
|
for (var i = 0; i < attempts; i++) {
|
|
await tester.pump();
|
|
if (finder.evaluate().isNotEmpty) return;
|
|
await tester.runAsync(
|
|
() => Future<void>.delayed(const Duration(milliseconds: 20)),
|
|
);
|
|
}
|
|
throw TestFailure('Timed out waiting for $finder');
|
|
}
|