Files
ProxyTrash/test/widget_test.dart
2026-05-23 05:33:39 -06:00

99 lines
3.3 KiB
Dart

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.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);
expect(find.byType(NavigationBar), findsOneWidget);
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<AuthSession?> restoreSession() async => _session;
@override
Future<AuthSession> signIn({required String email, required String password}) async {
_session = AuthSession(token: 'token-login', email: email, displayName: 'Usuario');
return _session!;
}
@override
Future<AuthSession> signUp({required String name, required String email, required String password}) async {
_session = AuthSession(token: 'token-register', email: email, displayName: name);
return _session!;
}
@override
Future<void> signOut() async {
_session = null;
}
}
class FakeAddressRepository implements AddressRepository {
AddressEntry? savedAddress;
@override
Future<void> saveAddress({required AuthSession session, required AddressEntry address}) async {
savedAddress = address;
}
@override
Future<List<AddressRecord>> getMyAddresses({required AuthSession session}) async {
return savedAddress == null
? <AddressRecord>[]
: <AddressRecord>[
AddressRecord(
id: 1,
houseNumber: savedAddress!.houseNumber,
colonia: savedAddress!.colonia,
street: savedAddress!.street,
),
];
}
}