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 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.delayed(const Duration(milliseconds: 20)), ); } throw TestFailure('Timed out waiting for $finder'); }