import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tane/data/seed_saving_catalog.dart'; import 'package:tane/db/database.dart'; import 'package:tane/domain/seed_saving.dart'; import '../support/test_support.dart'; /// The variety detail shows "how to save this seed" when the bundled catalog /// has guidance for the crop's family, and hides it otherwise. void main() { late AppDatabase db; setUp(() { db = newTestDatabase(); SeedSavingCatalog.data = parseSeedSaving(''' { "sources": [ { "title": "Seed to Seed" } ], "families": { "Solanaceae": { "pollination": "self", "isolationMinM": 3, "isolationMaxM": 6, "processing": "wet", "difficulty": "easy" } }, "species": {} } '''); }); tearDown(() { SeedSavingCatalog.data = null; return db.close(); }); Future pumpDetailFor(WidgetTester tester, String? category) async { final repo = newTestRepository(db); final id = await repo.addQuickVariety(label: 'Tomate', category: category); await tester.pumpWidget(wrapDetail(repository: repo, varietyId: id)); await tester.pumpAndSettle(); } testWidgets('shows the seed-saving section for a known family', (tester) async { await pumpDetailFor(tester, 'Solanaceae'); // The section is a collapsed expander — its title shows, its body doesn't // until opened. expect(find.text('Saving its seed'), findsOneWidget); expect(find.textContaining('Self-pollinating'), findsNothing); await tester.tap(find.byKey(const Key('detail.seedSaving'))); await tester.pumpAndSettle(); // The pollination line is a Text.rich (label + value), so match the run. expect(find.textContaining('Self-pollinating'), findsOneWidget); expect(find.text('Easy'), findsOneWidget); // the difficulty pill // Advisory note + a light source credit. expect(find.textContaining('adapt it to your climate'), findsOneWidget); expect(find.textContaining('Seed to Seed'), findsOneWidget); await disposeTree(tester); }); testWidgets('hides the section when nothing matches', (tester) async { await pumpDetailFor(tester, 'Unknownaceae'); expect(find.text('Saving its seed'), findsNothing); await disposeTree(tester); }); }