// Test spécifique pour la fonctionnalité d'ajout de membre // // Ce test vérifie que le bouton "Ajouter un membre" et la page de création // fonctionnent correctement import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:get_it/get_it.dart'; import 'package:unionflow_mobile_apps/core/di/injection.dart'; import 'package:unionflow_mobile_apps/features/members/presentation/pages/membre_create_page.dart'; import 'package:unionflow_mobile_apps/shared/widgets/permission_widget.dart'; void main() { group('Membre Create Functionality Tests', () { setUpAll(() async { // Initialiser les dépendances pour les tests await configureDependencies(); }); tearDownAll(() { // Nettoyer les dépendances après les tests GetIt.instance.reset(); }); testWidgets('PermissionFAB should work correctly with permissions', (WidgetTester tester) async { bool wasPressed = false; // Test avec permission accordée await tester.pumpWidget( MaterialApp( home: Scaffold( floatingActionButton: PermissionFAB( permission: () => true, // Permission accordée onPressed: () => wasPressed = true, tooltip: 'Ajouter un membre', child: const Icon(Icons.add), ), ), ), ); // Vérifier que le FAB est présent expect(find.byType(FloatingActionButton), findsOneWidget); expect(find.byIcon(Icons.add), findsOneWidget); // Taper sur le FAB await tester.tap(find.byType(FloatingActionButton)); await tester.pump(); // Vérifier que le callback a été appelé expect(wasPressed, isTrue); }); testWidgets('PermissionFAB should be hidden when permission denied', (WidgetTester tester) async { bool wasPressed = false; // Test avec permission refusée await tester.pumpWidget( MaterialApp( home: Scaffold( floatingActionButton: PermissionFAB( permission: () => false, // Permission refusée onPressed: () => wasPressed = true, tooltip: 'Ajouter un membre', child: const Icon(Icons.add), ), ), ), ); // Vérifier que le FAB n'est pas présent expect(find.byType(FloatingActionButton), findsNothing); expect(find.byIcon(Icons.add), findsNothing); }); testWidgets('MembreCreatePage should have essential UI elements', (WidgetTester tester) async { // Test de la page de création de membre en isolation await tester.pumpWidget( const MaterialApp( home: MembreCreatePage(), ), ); // Attendre que la page se charge await tester.pumpAndSettle(); // Vérifier que les éléments essentiels sont présents expect(find.byType(AppBar), findsOneWidget); expect(find.byType(Form), findsOneWidget); // Vérifier qu'il y a des champs de formulaire expect(find.byType(TextFormField), findsWidgets); // Vérifier qu'il y a des boutons d'action expect(find.byType(ElevatedButton), findsWidgets); }); testWidgets('MembreCreatePage should have step-based organization', (WidgetTester tester) async { // Test de la structure en étapes de la page de création await tester.pumpWidget( const MaterialApp( home: MembreCreatePage(), ), ); // Attendre que la page se charge await tester.pumpAndSettle(); // Vérifier que la structure en étapes est présente expect(find.byType(PageView), findsOneWidget); expect(find.byType(LinearProgressIndicator), findsOneWidget); // Vérifier que les étapes sont présentes expect(find.text('Informations\npersonnelles'), findsOneWidget); expect(find.text('Contact &\nAdresse'), findsOneWidget); expect(find.text('Finalisation'), findsOneWidget); }); testWidgets('MembreCreatePage should generate member number automatically', (WidgetTester tester) async { // Test de la génération automatique du numéro de membre await tester.pumpWidget( const MaterialApp( home: MembreCreatePage(), ), ); // Attendre que la page se charge await tester.pumpAndSettle(); // Chercher un champ qui pourrait contenir le numéro de membre // Le numéro devrait commencer par "MBR" selon l'implémentation final memberNumberFields = find.byWidgetPredicate( (widget) => widget is TextFormField && widget.controller?.text.startsWith('MBR') == true, ); expect(memberNumberFields, findsOneWidget); }); }); }