diff --git a/lib/ui/register_account/view/RegisterAccount.dart b/lib/ui/register_account/view/RegisterAccount.dart index 4e4e269..ca55414 100644 --- a/lib/ui/register_account/view/RegisterAccount.dart +++ b/lib/ui/register_account/view/RegisterAccount.dart @@ -15,12 +15,14 @@ import 'package:aranduapp/ui/shared/ErrorPopUp.dart'; import 'package:aranduapp/ui/shared/TextPassword.dart'; class RegisterAccount extends StatelessWidget { - const RegisterAccount({super.key}); + final RegisterAccountViewModel? viewModel; + + const RegisterAccount({super.key, this.viewModel}); @override Widget build(BuildContext context) { return ChangeNotifierProvider( - create: (context) => RegisterAccountViewModel(), + create: (context) => viewModel ?? RegisterAccountViewModel(), child: const _RegisterAccount(), ); } @@ -138,6 +140,7 @@ class _RegisterAccountState extends State<_RegisterAccount> { Widget _buildGoogleLoginButton() { return GestureDetector( + key: const Key('specificGestureDetectorKey'), onTap: () => Log.d(""), child: Container( width: 50, diff --git a/test/ui/register_account/view/RegisterAccount_test.dart b/test/ui/register_account/view/RegisterAccount_test.dart new file mode 100644 index 0000000..9148977 --- /dev/null +++ b/test/ui/register_account/view/RegisterAccount_test.dart @@ -0,0 +1,109 @@ +import 'package:aranduapp/ui/register_account/viewModel/RegisterViewModel.dart'; +import 'package:aranduapp/ui/shared/TextEmail.dart'; +import 'package:aranduapp/ui/shared/TextName.dart'; +import 'package:aranduapp/ui/shared/TextPassword.dart'; +import 'package:aranduapp/ui/shared/TitleSlogan.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:aranduapp/ui/register_account/view/RegisterAccount.dart'; +import 'package:provider/provider.dart'; + +class DubleRegisterAccountViewModel extends RegisterAccountViewModel { + @override + Future register() async { + isLoading = true; + notifyListeners(); + await Future.delayed(const Duration(milliseconds: 500)); + + isLoading = false; + notifyListeners(); + } +} + +void main() { + group('RegisterAccount Widget Tests', () { + late DubleRegisterAccountViewModel fakeViewModel; + + setUp(() { + fakeViewModel = DubleRegisterAccountViewModel(); + }); + + Widget buildTestableWidget(RegisterAccountViewModel viewModel) { + return MaterialApp( + home: RegisterAccount(viewModel: viewModel), + ); + } + + testWidgets('Verifica se os widgets básicos estão presentes', + (WidgetTester tester) async { + await tester.pumpWidget( + ChangeNotifierProvider.value( + value: fakeViewModel, + child: MaterialApp( + home: RegisterAccount(viewModel: fakeViewModel), + ), + ), + ); + // Verifica a presença dos itens + expect(find.byType(TitleSlogan), findsOneWidget); + expect(find.byType(TextName), findsNWidgets(2)); + expect(find.byType(TextEmail), findsOneWidget); + expect(find.byType(TextPassWord), findsOneWidget); + expect(find.byType(ElevatedButton), findsOneWidget); + }); + + testWidgets('Interação com o formulário de registro', + (WidgetTester tester) async { + await tester.pumpWidget( + ChangeNotifierProvider.value( + value: fakeViewModel, + child: MaterialApp( + home: RegisterAccount(viewModel: fakeViewModel), + ), + ), + ); + // Interações com os campos de texto + await tester.enterText( + find.widgetWithText(TextName, 'Nome'), 'Teste Nome'); + await tester.enterText( + find.widgetWithText(TextName, 'Nome de Usuário'), 'TesteUsuario'); + await tester.enterText(find.byType(TextEmail), 'teste@email.com'); + await tester.enterText(find.byType(TextPassWord), '123456'); + + // Verifica se os valores foram inseridos corretamente + expect(fakeViewModel.nameController.text, 'Teste Nome'); + expect(fakeViewModel.userNameController.text, 'TesteUsuario'); + expect(fakeViewModel.emailController.text, 'teste@email.com'); + expect(fakeViewModel.passwordController.text, '123456'); + + // Interação com o checkbox + await tester.tap(find.byType(Checkbox)); + await tester.pump(); + expect(fakeViewModel.isTermsAccepted, isTrue); + + // Interação com o botão + await tester.tap(find.byType(ElevatedButton)); + await tester.pump(); + expect(fakeViewModel.isLoading, isTrue); + }); + + testWidgets('Teste do botão de login com o Google', + (WidgetTester tester) async { + await tester.pumpWidget( + ChangeNotifierProvider.value( + value: fakeViewModel, + child: MaterialApp( + home: RegisterAccount(viewModel: fakeViewModel), + ), + ), + ); + + // Interação com o botão do Google + final googleButton = find.byKey(const Key('specificGestureDetectorKey')); + expect(googleButton, findsOneWidget); + + await tester.tap(googleButton); + await tester.pump(); + }); + }); +} diff --git a/test/widget_test.dart b/test/widget_test.dart deleted file mode 100644 index 975faa0..0000000 --- a/test/widget_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility in the flutter_test package. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:aranduapp/main.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -}