99 lines
3.3 KiB
Dart
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,
|
|
),
|
|
];
|
|
}
|
|
}
|