Skip to content

Commit

Permalink
Merge pull request #47 from fga-eps-mds/qa/shared
Browse files Browse the repository at this point in the history
[TEST] Realização de testes (shared) (fga-eps-mds/2024.2-ARANDU-DOC#59)
  • Loading branch information
dartmol203 authored Dec 20, 2024
2 parents 62a0856 + 78ffade commit 0dab13d
Show file tree
Hide file tree
Showing 5 changed files with 196 additions and 30 deletions.
34 changes: 34 additions & 0 deletions test/ui/Shared/ErrorPopUp_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:aranduapp/ui/shared/ErrorPopUp.dart';

void main() {
testWidgets('Testa ErrorPopUp', (WidgetTester tester) async {
await tester.pumpWidget(
const MaterialApp(
home: Scaffold(
body: ErrorPopUp(
content: Text('Este é um erro'),
),
),
),
);

// Verificar se o ícone de erro está presente
expect(find.byIcon(Icons.error), findsOneWidget);

// Verificar se o conteúdo do popup está correto
expect(find.text('Este é um erro'), findsOneWidget);

// Verificar se o botão 'OK' está presente
expect(find.text('OK'), findsOneWidget);

// Tocar no botão OK
await tester.tap(find.text('OK'));

// Rebuild após o tap para processar a navegação
await tester.pumpAndSettle();

expect(find.text('OK'), findsNothing); // O popup desapareceu
});
}
37 changes: 37 additions & 0 deletions test/ui/Shared/TextEmail_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import 'package:aranduapp/ui/shared/TextEmail.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
testWidgets('Testa se Email é válido ou inválido',
(WidgetTester tester) async {
final controller = TextEditingController();

await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: TextEmail(
padding: const EdgeInsets.all(10), controller: controller),
),
),
);

final emailField = find.byType(TextFormField);

// Função auxiliar para validar diferentes entradas de e-mail
Future<void> testEmail(String input, String? expectedError) async {
await tester.enterText(emailField, input);
await tester.pump();
final validator =
tester.widget<TextFormField>(emailField).validator!(input);
expect(validator, expectedError);
}

// Teste de validação para diferentes casos
await testEmail("", "E-mail inválido"); // Campo vazio
await testEmail("joaozinhi", "E-mail inválido"); // Sem '@'
await testEmail("joaozinhi@", "E-mail inválido"); // Sem domínio
await testEmail("joao@domain", "E-mail inválido"); // Sem extensão
await testEmail("[email protected]", null); // Entrada válida
});
}
35 changes: 35 additions & 0 deletions test/ui/Shared/TextName_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import 'package:aranduapp/ui/shared/TextName.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
testWidgets('Testa se o nome é válido', (WidgetTester tester) async {
final controller = TextEditingController();

await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: TextName(
controller: controller,
padding: const EdgeInsets.all(10),
),
)));

final nameField = find.byType(TextFormField);

// Função auxiliar para validar diferentes entradas de nome
Future<void> testName(String input, String? expectedError) async {
await tester.enterText(nameField, input);
await tester.pump();
final validator =
tester.widget<TextFormField>(nameField).validator!(input);
expect(validator, expectedError);
}

// Teste de validação para diferentes casos de nome
await testName("", 'Nome inválido'); // Campo vazio
await testName(" a", 'Nome inválido'); // Nome com menos de 3 caracteres
await testName("Jo", 'Nome inválido'); // Nome com 2 caracteres
await testName("João", null); // Nome válido
await testName("Maria", null); // Outro nome válido
});
}
90 changes: 90 additions & 0 deletions test/ui/Shared/TextPassword_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:aranduapp/ui/shared/TextPassword.dart';

void main() {
// Testa a validação da senha no widget TextPassWord
testWidgets('Testa se a senha é válida', (WidgetTester tester) async {
final controller = TextEditingController();

// Monta o widget de teste com TextPassWord
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: TextPassWord(
controller: controller,
padding: const EdgeInsets.all(10),
),
),
),
);

// Localiza o campo de texto do formulário
final passwordField = find.byType(TextFormField);

// Função para testar diferentes cenários de validação de senha
Future<void> testPassword(String input, String? expectedError) async {
await tester.enterText(passwordField, input); // Insere texto no campo
await tester.pump(); // Re-renderiza o widget para capturar mudanças
final validator =
tester.widget<TextFormField>(passwordField).validator!(input);
expect(validator,
expectedError); // Verifica se o erro retornado é o esperado
}

// Testa senhas inválidas, válidas e campo vazio
await testPassword('12345', "Senha inválida"); // Senha muito curta
await testPassword('validPassword123', null); // Senha válida
await testPassword('', 'Senha inválida'); // Campo vazio
});

// Testa a funcionalidade de visibilidade da senha
testWidgets('Testa a visibilidade da senha', (WidgetTester tester) async {
final controller = TextEditingController();

// Monta o widget de teste com TextPassWord
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: TextPassWord(
controller: controller,
padding: const EdgeInsets.all(10),
),
),
),
);

// Localiza o ícone de visibilidade e o campo de texto
final visibilityIcon = find.byIcon(Icons.visibility_off_outlined);
final textFieldFinder = find.byType(TextField);

// Verifica se o ícone inicial de visibilidade está presente
expect(visibilityIcon, findsOneWidget);

// Verifica o estado inicial de obscureText (deve ser verdadeiro)
TextField textField = tester.widget<TextField>(textFieldFinder);
expect(textField.obscureText, true);

// Simula o clique no ícone para alterar a visibilidade da senha
await tester.tap(visibilityIcon);
await tester.pump();

// Verifica se o ícone foi alterado para o estado visível
expect(find.byIcon(Icons.visibility_outlined), findsOneWidget);

// Verifica se obscureText agora é falso
textField = tester.widget<TextField>(textFieldFinder);
expect(textField.obscureText, false);

// Simula outro clique para voltar a ocultar a senha
await tester.tap(find.byIcon(Icons.visibility_outlined));
await tester.pump();

// Verifica se o ícone voltou para o estado inicial
expect(find.byIcon(Icons.visibility_off_outlined), findsOneWidget);

// Verifica novamente se obscureText é verdadeiro
textField = tester.widget<TextField>(textFieldFinder);
expect(textField.obscureText, true);
});
}
30 changes: 0 additions & 30 deletions test/widget_test.dart

This file was deleted.

0 comments on commit 0dab13d

Please sign in to comment.