import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:life_helper/data/db/app_database.dart'; import 'package:life_helper/data/seed/seed_importer.dart'; import 'package:path/path.dart' as p; /// Loads the real assets/seed/*.json files from disk (bypasses rootBundle /// which needs Flutter binding) and runs them through SeedImporter end-to-end. /// This is the strongest signal that the adapters and the hand-crafted JSON /// agree on field names and CHECK-constraint values. void main() { late AppDatabase db; final repoRoot = Directory.current.path; Future diskLoader(String path) async { final f = File(p.join(repoRoot, path)); return f.readAsString(); } setUp(() { db = AppDatabase.memory(); }); tearDown(() async { await db.close(); }); test('real seed assets import end-to-end', () async { final importer = SeedImporter(db, loadAsset: diskLoader); final ran = await importer.importIfNeeded(); expect(ran, true); final pCount = (await db.select(db.protocols).get()).length; final bpCount = (await db.select(db.breakProtocols).get()).length; final cfCount = (await db.select(db.commonFrames).get()).length; final mCount = (await db.select(db.methodologies).get()).length; final fpCount = (await db.select(db.framePatterns).get()).length; final rmiCount = (await db.select(db.rewardMenuItems).get()).length; final refCount = (await db.select(db.references).get()).length; final dpCount = (await db.select(db.dietPatterns).get()).length; expect(pCount, greaterThanOrEqualTo(30)); expect(bpCount, greaterThanOrEqualTo(5)); expect(cfCount, 5); expect(mCount, greaterThanOrEqualTo(15)); expect(fpCount, greaterThanOrEqualTo(20)); expect(rmiCount, greaterThanOrEqualTo(20)); expect(refCount, greaterThanOrEqualTo(50)); expect(dpCount, greaterThanOrEqualTo(3)); }); }