import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tane/app.dart'; import 'package:tane/i18n/strings.g.dart'; import 'package:tane/ui/intro_screen.dart'; import '../support/test_support.dart'; void main() { Widget standalone(VoidCallback onDone) => TranslationProvider( child: MaterialApp(home: IntroScreen(onDone: onDone)), ); testWidgets('carousel advances through slides and finishes', (tester) async { LocaleSettings.setLocaleSync(AppLocale.en); var done = false; await tester.pumpWidget(standalone(() => done = true)); await tester.pumpAndSettle(); // First slide + a "Next" button (not "Get started" yet). expect(find.text('The seed that brought you here'), findsOneWidget); expect(find.text('Next'), findsOneWidget); expect(find.text('Get started'), findsNothing); // Advance to the last of the five slides. for (var i = 0; i < 4; i++) { await tester.tap(find.text('Next')); await tester.pumpAndSettle(); } expect(find.text('To sow is to multiply'), findsOneWidget); expect(find.text('Get started'), findsOneWidget); await tester.tap(find.text('Get started')); await tester.pumpAndSettle(); expect(done, isTrue); }); testWidgets('Skip finishes immediately', (tester) async { LocaleSettings.setLocaleSync(AppLocale.en); var done = false; await tester.pumpWidget(standalone(() => done = true)); await tester.pumpAndSettle(); await tester.tap(find.text('Skip')); await tester.pumpAndSettle(); expect(done, isTrue); }); testWidgets('first launch opens on the intro and marks it seen', ( tester, ) async { LocaleSettings.setLocaleSync(AppLocale.en); final db = newTestDatabase(); addTearDown(db.close); final onboarding = newTestOnboardingStore(introSeen: false); await tester.pumpWidget( TranslationProvider( child: TaneApp( repository: newTestRepository(db), species: newTestSpeciesRepository(db), onboarding: onboarding, showIntro: true, ), ), ); await tester.pumpAndSettle(); // The carousel is shown, not the home menu. expect(find.text('The seed that brought you here'), findsOneWidget); await tester.tap(find.text('Skip')); await tester.pumpAndSettle(); // Lands on home, and the intro is now remembered as seen. expect(find.text('Your inventory'), findsOneWidget); expect(await onboarding.introSeen(), isTrue); await disposeTree(tester); }); }