From 5e7dc172ddbe1262b1208f049be7a8170c35aa6f Mon Sep 17 00:00:00 2001 From: EngDann Date: Thu, 19 Dec 2024 17:44:00 -0300 Subject: [PATCH 1/5] qa(#59): teste de registro da conta --- .../RegisterAccount_test.dart | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 test/ui/register_account/RegisterAccount_test.dart diff --git a/test/ui/register_account/RegisterAccount_test.dart b/test/ui/register_account/RegisterAccount_test.dart new file mode 100644 index 0000000..7d19f61 --- /dev/null +++ b/test/ui/register_account/RegisterAccount_test.dart @@ -0,0 +1,77 @@ +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'; + +void main() { + group('RegisterAccount Widget Tests', () { + testWidgets('Verifica se os widgets básicos estão presentes', + (WidgetTester tester) async { + await tester.pumpWidget( + const MaterialApp( + home: RegisterAccount(), + ), + ); + // 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( + const MaterialApp( + home: RegisterAccount(), + ), + ); + + // Interações com os campos de texto + await tester.enterText( + find.widgetWithText(TextName, 'Nome'), 'Teste Nome'); + expect(find.text('Teste Nome'), findsOneWidget); + + await tester.enterText( + find.widgetWithText(TextName, 'Nome de Usuário'), 'TesteUsuario'); + expect(find.text('TesteUsuario'), findsOneWidget); + + await tester.enterText(find.byType(TextEmail), 'teste@email.com'); + expect(find.text('teste@email.com'), findsOneWidget); + + await tester.enterText(find.byType(TextPassWord), '123456'); + expect(find.text('123456'), findsOneWidget); + + // Interação com o checkbox + await tester.tap(find.byType(Checkbox)); + await tester.pump(); + expect(tester.widget(find.byType(Checkbox)).value, isTrue); + + // Interações com o botão + await tester.tap(find.byType(ElevatedButton)); + await tester.pump(); + + expect(find.byType(CircularProgressIndicator), findsOneWidget); + }); + + testWidgets('Teste do botão de login com o Google', + (WidgetTester tester) async { + await tester.pumpWidget( + const MaterialApp( + home: RegisterAccount(), + ), + ); + + // Interações com o botão do google + final googleButton = find.byType(GestureDetector); + expect(googleButton, findsOneWidget); + + await tester.tap(googleButton); + await tester.pump(); + }); + }); +} From ec8e236b2bd934945bad5548bff9bc24d5e356ea Mon Sep 17 00:00:00 2001 From: EngDann Date: Thu, 19 Dec 2024 18:24:37 -0300 Subject: [PATCH 2/5] Fix(#59): Exclui widget_test --- test/widget_test.dart | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 test/widget_test.dart 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); - }); -} From 44f1cd1cde532eac8e063a044960c4b995c489ec Mon Sep 17 00:00:00 2001 From: EngDann Date: Thu, 19 Dec 2024 19:01:11 -0300 Subject: [PATCH 3/5] fix(#59): Corrige caminho --- test/ui/register_account/{ => view}/RegisterAccount_test.dart | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/ui/register_account/{ => view}/RegisterAccount_test.dart (100%) diff --git a/test/ui/register_account/RegisterAccount_test.dart b/test/ui/register_account/view/RegisterAccount_test.dart similarity index 100% rename from test/ui/register_account/RegisterAccount_test.dart rename to test/ui/register_account/view/RegisterAccount_test.dart From 763be4fac7e902eb2678421f7a8b6fe29db91a75 Mon Sep 17 00:00:00 2001 From: EngDann Date: Thu, 19 Dec 2024 19:07:52 -0300 Subject: [PATCH 4/5] =?UTF-8?q?qa(#59):=20Adiciona=20dubl=C3=AA=20ao=20tes?= =?UTF-8?q?te?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/RegisterAccount_test.dart | 51 +++++++++++++++---- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/test/ui/register_account/view/RegisterAccount_test.dart b/test/ui/register_account/view/RegisterAccount_test.dart index 7d19f61..6849144 100644 --- a/test/ui/register_account/view/RegisterAccount_test.dart +++ b/test/ui/register_account/view/RegisterAccount_test.dart @@ -1,3 +1,4 @@ +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'; @@ -5,17 +6,39 @@ 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(); + }); + testWidgets('Verifica se os widgets básicos estão presentes', (WidgetTester tester) async { await tester.pumpWidget( - const MaterialApp( - home: RegisterAccount(), + ChangeNotifierProvider.value( + value: fakeViewModel, + child: const MaterialApp( + home: RegisterAccount(), + ), ), ); - // Verifica a presença dos itens. + + // Verifica a presença dos itens expect(find.byType(TitleSlogan), findsOneWidget); expect(find.byType(TextName), findsNWidgets(2)); expect(find.byType(TextEmail), findsOneWidget); @@ -26,8 +49,11 @@ void main() { testWidgets('Interação com o formulário de registro', (WidgetTester tester) async { await tester.pumpWidget( - const MaterialApp( - home: RegisterAccount(), + ChangeNotifierProvider.value( + value: fakeViewModel, + child: const MaterialApp( + home: RegisterAccount(), + ), ), ); @@ -49,24 +75,27 @@ void main() { // Interação com o checkbox await tester.tap(find.byType(Checkbox)); await tester.pump(); - expect(tester.widget(find.byType(Checkbox)).value, isTrue); + expect(fakeViewModel.isTermsAccepted, isTrue); - // Interações com o botão + // Interação com o botão await tester.tap(find.byType(ElevatedButton)); await tester.pump(); - expect(find.byType(CircularProgressIndicator), findsOneWidget); + expect(fakeViewModel.isLoading, isTrue); }); testWidgets('Teste do botão de login com o Google', (WidgetTester tester) async { await tester.pumpWidget( - const MaterialApp( - home: RegisterAccount(), + ChangeNotifierProvider.value( + value: fakeViewModel, + child: const MaterialApp( + home: RegisterAccount(), + ), ), ); - // Interações com o botão do google + // Interação com o botão do Google final googleButton = find.byType(GestureDetector); expect(googleButton, findsOneWidget); From d6ec378e493e2a52b0cd5db36e7d7c410880a692 Mon Sep 17 00:00:00 2001 From: EngDann Date: Fri, 20 Dec 2024 13:15:21 -0300 Subject: [PATCH 5/5] =?UTF-8?q?fix(#59):=20Corrige=20teste=20do=20bot?= =?UTF-8?q?=C3=A3o=20google?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/RegisterAccount.dart | 7 +++- .../view/RegisterAccount_test.dart | 37 ++++++++++--------- 2 files changed, 25 insertions(+), 19 deletions(-) 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 index 6849144..9148977 100644 --- a/test/ui/register_account/view/RegisterAccount_test.dart +++ b/test/ui/register_account/view/RegisterAccount_test.dart @@ -14,6 +14,7 @@ class DubleRegisterAccountViewModel extends RegisterAccountViewModel { isLoading = true; notifyListeners(); await Future.delayed(const Duration(milliseconds: 500)); + isLoading = false; notifyListeners(); } @@ -27,17 +28,22 @@ void main() { 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: const MaterialApp( - home: RegisterAccount(), + child: MaterialApp( + home: RegisterAccount(viewModel: fakeViewModel), ), ), ); - // Verifica a presença dos itens expect(find.byType(TitleSlogan), findsOneWidget); expect(find.byType(TextName), findsNWidgets(2)); @@ -51,26 +57,24 @@ void main() { await tester.pumpWidget( ChangeNotifierProvider.value( value: fakeViewModel, - child: const MaterialApp( - home: RegisterAccount(), + child: MaterialApp( + home: RegisterAccount(viewModel: fakeViewModel), ), ), ); - // Interações com os campos de texto await tester.enterText( find.widgetWithText(TextName, 'Nome'), 'Teste Nome'); - expect(find.text('Teste Nome'), findsOneWidget); - await tester.enterText( find.widgetWithText(TextName, 'Nome de Usuário'), 'TesteUsuario'); - expect(find.text('TesteUsuario'), findsOneWidget); - await tester.enterText(find.byType(TextEmail), 'teste@email.com'); - expect(find.text('teste@email.com'), findsOneWidget); - await tester.enterText(find.byType(TextPassWord), '123456'); - expect(find.text('123456'), findsOneWidget); + + // 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)); @@ -80,7 +84,6 @@ void main() { // Interação com o botão await tester.tap(find.byType(ElevatedButton)); await tester.pump(); - expect(fakeViewModel.isLoading, isTrue); }); @@ -89,14 +92,14 @@ void main() { await tester.pumpWidget( ChangeNotifierProvider.value( value: fakeViewModel, - child: const MaterialApp( - home: RegisterAccount(), + child: MaterialApp( + home: RegisterAccount(viewModel: fakeViewModel), ), ), ); // Interação com o botão do Google - final googleButton = find.byType(GestureDetector); + final googleButton = find.byKey(const Key('specificGestureDetectorKey')); expect(googleButton, findsOneWidget); await tester.tap(googleButton);