// Guided-setup wizard — the three explained answer steps. Verifies // that options render as localized cards with their one-line // explanation (no English enum humanization) and that Weiter/Zurück // walk the steps. The review step calls the CLI (a subprocess) and is // out of scope for a widget test. import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:chain_studio/l10n/app_localizations.dart'; import 'package:chain_studio/widgets/guided_setup_dialog.dart'; Widget _host() => MaterialApp( locale: const Locale('de'), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, home: Builder( builder: (context) => Scaffold( body: Center( child: ElevatedButton( onPressed: () => GuidedSetupDialog.show(context), child: const Text('open'), ), ), ), ), ); void main() { testWidgets('step 1 shows scenario options in German with explanations', ( tester, ) async { await tester.pumpWidget(_host()); await tester.tap(find.text('open')); await tester.pumpAndSettle(); // Step counter + localized (German) scenario labels, not the // English enum humanization. expect(find.text('Schritt 1 von 3'), findsOneWidget); expect(find.text('Regulierter Produktivbetrieb'), findsOneWidget); expect(find.text('Erst mal ausprobieren'), findsOneWidget); // Each option carries its one-line explanation. expect( find.textContaining('menschliche Freigabe vor jedem KI-Schritt'), findsOneWidget, ); // No leaked English enum labels. expect(find.text('Regulated Production'), findsNothing); expect(find.text('Trying Out'), findsNothing); }); testWidgets('Weiter/Zurück walk the three answer steps', (tester) async { await tester.pumpWidget(_host()); await tester.tap(find.text('open')); await tester.pumpAndSettle(); // Step 1 → 2 (task). await tester.tap(find.text('Weiter')); await tester.pumpAndSettle(); expect(find.text('Schritt 2 von 3'), findsOneWidget); expect(find.text('Text aus Dokumenten extrahieren'), findsOneWidget); // Step 2 → 3 (environment) shows the two plain-language toggles. await tester.tap(find.text('Weiter')); await tester.pumpAndSettle(); expect(find.text('Schritt 3 von 3'), findsOneWidget); expect(find.text('Dieser Rechner'), findsOneWidget); expect( find.text('Vor jedem KI-Schritt einen Menschen um Freigabe bitten'), findsOneWidget, ); // Zurück returns to step 2. await tester.tap(find.text('Zurück')); await tester.pumpAndSettle(); expect(find.text('Schritt 2 von 3'), findsOneWidget); }); }