diff --git a/lib/page/dashboard/dashboard.dart b/lib/page/dashboard/dashboard.dart index 53aebe08f5a73488edfc7da9a969b6d7be0b4abd..228999c49f01ee6cd824c1952610f0ac2e4c5921 100644 --- a/lib/page/dashboard/dashboard.dart +++ b/lib/page/dashboard/dashboard.dart @@ -33,11 +33,12 @@ class DashboardState extends State { setInitialLocation(); } - 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( @@ -49,7 +50,7 @@ class DashboardState extends State { left: doubleSpace, right: doubleSpace, top: doubleSpace), color: Colors.white, child: TextFormField( - key: Key("Text Field Mau Kemana"), + key: textFieldKey, decoration: InputDecoration( prefixIcon: Icon(Icons.search), border: OutlineInputBorder( @@ -60,7 +61,7 @@ class DashboardState extends State { labelText: 'Kamu mau kemana?', suffixIcon: IconButton( icon: Icon(Icons.mic), - onPressed: () {} + onPressed: () {}, )), onTap: () => _navigateToPencarianPage(context), ), diff --git a/lib/page/pencarian/pencarian.dart b/lib/page/pencarian/pencarian.dart index e6c0f4a71181d3b561a8a35d623a9dd35134411f..ba431208c7ed8a52e5afc1c27a0b9a2cd73b1b53 100644 --- a/lib/page/pencarian/pencarian.dart +++ b/lib/page/pencarian/pencarian.dart @@ -7,7 +7,6 @@ class Pencarian extends StatefulWidget { } class PencarianState extends State { - Icon searchIcon = Icon(Icons.search); Widget appBarText = Text("Pencarian Lokasi"); @override @@ -15,7 +14,10 @@ class PencarianState extends State { return Scaffold( appBar: AppBar( backgroundColor: Colors.green, - leading: IconButton(icon: Icon(Icons.arrow_left), onPressed: () {}), + leading: IconButton( + icon: Icon(Icons.arrow_left), + key: Key("Back Icon Key"), + onPressed: () => Navigator.pop(context, 'Take me back')), title: TextFormField( key: Key("Text Field Mau Kemana"), decoration: InputDecoration( 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 _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 _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