import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_application_1/main.dart'; import 'package:flutter_application_1/models/address_entry.dart'; import 'package:flutter_application_1/models/address_record.dart'; import 'package:flutter_application_1/models/auth_session.dart'; import 'package:flutter_application_1/services/address_repository.dart'; import 'package:flutter_application_1/services/auth_repository.dart'; void main() { testWidgets('Muestra login, pasa a dirección y abre el tablero', (WidgetTester tester) async { final authRepository = FakeAuthRepository(); final addressRepository = FakeAddressRepository(); await tester.pumpWidget( MyApp( authRepository: authRepository, addressRepository: addressRepository, enableLiveFeatures: false, ), ); await tester.pumpAndSettle(); expect(find.text('Bienvenido'), findsOneWidget); expect(find.text('Entrar'), findsOneWidget); expect(find.text('Crear cuenta'), findsOneWidget); await tester.enterText(find.byType(TextFormField).at(0), 'demo@correo.com'); await tester.enterText(find.byType(TextFormField).at(1), '123456'); await tester.ensureVisible(find.text('Ingresar')); await tester.tap(find.text('Ingresar')); await tester.pumpAndSettle(); expect(find.text('Dirección'), findsOneWidget); expect(find.text('Guardar dirección'), findsOneWidget); await tester.enterText(find.byType(TextFormField).at(0), '12A'); await tester.enterText(find.byType(TextFormField).at(1), 'Centro'); await tester.enterText(find.byType(TextFormField).at(2), 'Reforma'); await tester.tap(find.text('Guardar dirección')); await tester.pump(); await tester.pump(const Duration(seconds: 2)); expect(addressRepository.savedAddress, isNotNull); final hasBottomNavigation = find.byType(NavigationBar).evaluate().isNotEmpty; final hasNavigationRail = find.byType(NavigationRail).evaluate().isNotEmpty; expect(hasBottomNavigation || hasNavigationRail, isTrue); expect(find.text('Mapa'), findsOneWidget); expect(find.text('Calendario'), findsOneWidget); expect(find.text('Avisos'), findsOneWidget); expect(find.text('Datos'), findsOneWidget); }); } class FakeAuthRepository implements AuthRepository { AuthSession? _session; @override Future restoreSession() async => _session; @override Future signIn({required String email, required String password}) async { _session = AuthSession(token: 'token-login', email: email, displayName: 'Usuario'); return _session!; } @override Future signUp({required String name, required String email, required String password}) async { _session = AuthSession(token: 'token-register', email: email, displayName: name); return _session!; } @override Future signOut() async { _session = null; } } class FakeAddressRepository implements AddressRepository { AddressEntry? savedAddress; @override Future saveAddress({required AuthSession session, required AddressEntry address}) async { savedAddress = address; } @override Future> getMyAddresses({required AuthSession session}) async { return savedAddress == null ? [] : [ AddressRecord( id: 1, houseNumber: savedAddress!.houseNumber, colonia: savedAddress!.colonia, street: savedAddress!.street, ), ]; } }