diff --git a/lib/page/dashboard/dashboard.dart b/lib/page/dashboard/dashboard.dart index c4fa8a122e989bb03fda052269681783b0e561a5..871230578c3b792f449d4a44eeb7e6032e19db96 100644 --- a/lib/page/dashboard/dashboard.dart +++ b/lib/page/dashboard/dashboard.dart @@ -62,11 +62,12 @@ class DashboardState extends State<Dashboard> { } } - void _navigateToPencarianPage(BuildContext context) { + void _navigateToPencarianPage(BuildContext context) { final route = MaterialPageRoute(builder: (_) => Pencarian()); Navigator.of(context).push(route); } + static const textFieldKey = Key('Text Field Mau Kemana'); @override Widget build(BuildContext context) { return Scaffold( diff --git a/test/navigation_test.dart b/test/navigation_test.dart new file mode 100644 index 0000000000000000000000000000000000000000..5efeb5a7adad639a471953e152104d448aaab716 --- /dev/null +++ b/test/navigation_test.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:mockito/mockito.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:ppl_disabilitas/page/dashboard/dashboard.dart'; + + +class MockNavigatorObserver extends Mock implements NavigatorObserver {} + +void main() { + group('Dashboard navigation tests', () { + NavigatorObserver mockObserver; + + setUp(() { + mockObserver = MockNavigatorObserver(); + }); + + Future<Null> _buildDashboardPage(WidgetTester tester) async { + await tester.pumpWidget(MaterialApp( + home: Dashboard(), + + /// This mocked observer will now receive all navigation events + /// that happen in our app. + navigatorObservers: [mockObserver], + )); + + /// The tester.pumpWidget() call above just built our app widget + /// and triggered the pushObserver method on the mockObserver once. + verify(mockObserver.didPush(any, any)); + } + + Future<Null> _navigateToPencarianPage(WidgetTester tester) async { + final textFieldKey = Key("Text Field Mau Kemana"); + await tester.tap(find.byKey(textFieldKey)); + await tester.pumpAndSettle(); + } + + testWidgets( + 'when tapping text form field, should navigate to pencarina page', + (WidgetTester tester) async { + final textFieldKeyPencarian = Key("Text Field Mau Kemana"); + await _buildDashboardPage(tester); + await _navigateToPencarianPage(tester); + verify(mockObserver.didPush(any, any)); + expect(find.byKey(textFieldKeyPencarian), findsOneWidget); + + }); + + testWidgets('tapping the back button should navigate back to the dashboard', + (WidgetTester tester) async { + final backIconKey = Key("Back Icon Key"); + await _buildDashboardPage(tester); + await _navigateToPencarianPage(tester); + final Route pushedRoute =verify(mockObserver.didPush(captureAny, any)).captured.single; + String popResult; + pushedRoute.popped.then((result) => popResult = result); + await tester.tap(find.byKey(backIconKey)); + await tester.pumpAndSettle(); + expect(popResult, 'Take me back'); + + + + }); + }); +} \ No newline at end of file