Automation Testing
1. integration_test/signup_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:crop_care_companion/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets("Sign Up With Valid Email and Password", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
// First Name, Last Name, Email, Password
await tester.enterText(find.byType(TextField).at(0), 'John');
await tester.enterText(find.byType(TextField).at(1), 'Doe');
await tester.enterText(find.byType(TextField).at(2), 'john.doe@example.com');
await tester.enterText(find.byType(TextField).at(3), 'Password@123');
// Sign Up
await tester.tap(find.text('Sign Up'));
await tester.pumpAndSettle();
// Expect VerificationScreen
expect(find.textContaining('Verify Your Email'), findsOneWidget);
});
2. integration_test/signin_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:crop_care_companion/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
Automation Testing
testWidgets("Sign In With Valid Credentials", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
await tester.enterText(find.byType(TextField).at(0), 'john.doe@example.com');
await tester.enterText(find.byType(TextField).at(1), 'Password@123');
await tester.tap(find.text('Sign In'));
await tester.pumpAndSettle();
// Expect MainScreen or VerificationScreen
expect(find.text('Crop Care'), findsOneWidget);
});
}
3. integration_test/onboarding_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:crop_care_companion/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets("Onboarding Flow Test", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
// Tap "Next" 5 times
for (var i = 0; i < 5; i++) {
await tester.tap(find.text('Next'));
await tester.pumpAndSettle();
}
expect(find.text('Get Started'), findsOneWidget);
Automation Testing
await tester.tap(find.text('Get Started'));
await tester.pumpAndSettle();
// Should go to AuthWrapper (Auth or Main)
expect(find.text('Disclaimer'), findsOneWidget);
});
4. integration_test/forget_password_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:crop_care_companion/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets("Forget Password Flow", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
// Navigate to ForgetPassword
await tester.tap(find.text("Forgot Password?"));
await tester.pumpAndSettle();
await tester.enterText(find.byType(TextField).first, "john.doe@example.com");
await tester.tap(find.text("Send Reset Email"));
await tester.pumpAndSettle();
expect(find.textContaining("Password reset email sent"), findsOneWidget);
});
5. integration_test/email_verification_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
Automation Testing
import 'package:crop_care_companion/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets("Email Verification Screen Test", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
// Assume post-signup, we're on VerificationScreen
expect(find.text("Verify Your Email"), findsOneWidget);
// Resend email
await tester.tap(find.text("Resend Email"));
await tester.pumpAndSettle();
// Button disabled while sending
final btn = tester.widget<ElevatedButton>(find.byType(ElevatedButton).first);
expect(btn.enabled, false);
});
6. integration_test/auth_switch_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:flutter/material.dart';
import 'package:crop_care_companion/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets("Auth Switch Screen Test", (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
Automation Testing
// Close disclaimer
expect(find.text("Disclaimer"), findsOneWidget);
await tester.tap(find.text("Close"));
await tester.pumpAndSettle();
// Toggle to Sign In
await tester.tap(find.text("Already have an account? Sign In"));
await tester.pumpAndSettle(const Duration(seconds: 1));
expect(find.text("Dont have an account? Sign Up"), findsOneWidget);
// Toggle back
await tester.tap(find.text("Dont have an account? Sign Up"));
await tester.pumpAndSettle(const Duration(seconds: 1));
expect(find.text("Already have an account? Sign In"), findsOneWidget);
});
7. integration_test/alarm_screen_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:crop_care_companion/main.dart' as app;
import 'package:flutter/material.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('Add → Edit → Delete Alarm', (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
// Add
await tester.tap(find.byType(FloatingActionButton));
await tester.pumpAndSettle();
Automation Testing
await tester.enterText(find.byType(TextField).first, 'Test Alarm');
await tester.tap(find.textContaining('Pick Date'));
await tester.pumpAndSettle();
await tester.tap(find.text(DateTime.now().day.toString()));
await tester.pumpAndSettle();
await tester.tap(find.text('OK'));
await tester.pumpAndSettle();
await tester.tap(find.text('OK'));
await tester.pumpAndSettle();
await tester.tap(find.text('Save'));
await tester.pumpAndSettle();
expect(find.text('Test Alarm'), findsOneWidget);
// Edit
await tester.tap(find.byIcon(Icons.edit).first);
await tester.pumpAndSettle();
await tester.enterText(find.byType(TextField).first, 'Edited Alarm');
await tester.tap(find.text('Update'));
await tester.pumpAndSettle();
expect(find.text('Edited Alarm'), findsOneWidget);
// Delete
await tester.tap(find.byIcon(Icons.delete).first);
await tester.pumpAndSettle();
expect(find.text('Edited Alarm'), findsNothing);
});
}
Automation Testing
8. integration_test/main_screen_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:crop_care_companion/main.dart' as app;
import 'package:flutter/material.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('BottomNav Navigation & Logout', (tester) async {
app.main();
await tester.pumpAndSettle();
// Scan (default)
expect(find.text('Scan'), findsWidgets);
// Tracker
await tester.tap(find.text('Tracker'));
await tester.pumpAndSettle();
expect(find.byIcon(Icons.note), findsOneWidget);
// Calendar
await tester.tap(find.text('Calendar'));
await tester.pumpAndSettle();
expect(find.byIcon(Icons.calendar_month), findsOneWidget);
// Library
await tester.tap(find.text('Library'));
await tester.pumpAndSettle();
expect(find.byIcon(Icons.library_books), findsOneWidget);
// Logout
await tester.tap(find.byIcon(Icons.logout));
await tester.pumpAndSettle();
Automation Testing
expect(find.text('Disclaimer'), findsOneWidget);
});
9. integration_test/main_app_test.dart:
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:crop_care_companion/main.dart' as app;
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('App start → Loading → Onboarding → Auth/Main', (tester) async {
// 1. Loading
app.main();
await tester.pump();
expect(find.byType(CircularProgressIndicator), findsOneWidget);
// 2. Onboarding (signed out)
await FirebaseAuth.instance.signOut();
await tester.pumpAndSettle();
expect(find.text('Get Started'), findsOneWidget);
// 3. Get Started → Auth
await tester.tap(find.text('Get Started'));
await tester.pumpAndSettle();
expect(find.text('Disclaimer'), findsOneWidget);
// 4. If signed in & verified, Get Started → MainScreen
// (Requires real or mocked auth state prior to app.main())
});
Automation Testing
Test Test
N Name of Modules Framewo
Descriptio Test Script reference Rep
o tools Automated rk Used
n ort
integration integration
Valid sign- SignUpWith signup_test.darttestWidgets("Sig
1 _test + _test + Pass
up flow Email n Up With Valid…")
flutter_test flutter_test
integration integration
Valid sign- SignInWithE signin_test.darttestWidgets("Sign
2 _test + _test + Pass
in flow mail In With Valid…")
flutter_test flutter_test
integration Onboardin integration
OnboardingS onboarding_test.darttestWidgets(
3 _test + g _test + Pass
creen "Onboarding Flow…")
flutter_test navigation flutter_test
integration integration
Password ForgetPassw forget_password_test.darttestWi
4 _test + _test + Pass
reset flow ord dgets("Forget Password…")
flutter_test flutter_test
Email
integration integration
verification VerificationS email_verification_test.darttestW
5 _test + _test + Pass
resend & creen idgets("Email Verification…")
flutter_test flutter_test
navigation
Auth
integration screen flip integration
auth_switch_test.darttestWidgets
6 _test + & Auth _test + Pass
("Auth Switch Screen…")
flutter_test disclaimer flutter_test
dialog
integration Add/Edit/ integration
alarm_screen_test.darttestWidget
7 _test + Delete AlarmScreen _test + Pass
s('Add → Edit → Delete Alarm')
flutter_test alarms flutter_test
Automation Testing
Test Test
N Name of Modules Framewo
Descriptio Test Script reference Rep
o tools Automated rk Used
n ort
Bottom nav
integration integration
tab main_screen_test.darttestWidget
8 _test + MainScreen _test + Pass
switching s('BottomNav Navigation…')
flutter_test flutter_test
& logout
App start:
integration loading → AuthWrappe integration
main_app_test.darttestWidgets('
9 _test + onboarding r & _test + Pass
App start → Loading →…')
flutter_test → IntroScreen flutter_test
auth/main