part of 'app_test.dart'; class MenuTest { static Future labels2AppbarConsistency() async { patrolWidgetTest( 'As labels dos menuItems correspondem aos títulos das AppBars?', // (PatrolTester tester) async { $ = tester; await _logged(); await $.pumpWidgetAndSettle(const App()); await $.waitUntilVisible($(MenuStaggeredView)); Future.delayed(const Duration(milliseconds: 500)); final List routes = MenuEntry.entries .where((entry) => entry.key != 'FRE-HUB-LOGOUT') .map((entry) => entry.route) .toList(); final List titles = MenuEntry.entries .where((entry) => entry.key != 'FRE-HUB-LOGOUT') .map((entry) => entry.name) .toList(); final LinkedHashMap routesTitles = LinkedHashMap.fromIterables(routes, titles); for (final entry in routesTitles.entries) { await $.pumpAndSettle(); final String route = entry.key; final String title = entry.value; print('route: $route'); print('title: $title'); if (route == '/petsPage') continue; if (route == '/fastPassPage') continue; if (route == '/reservation') continue; await $.pumpAndSettle(); ff.navigatorKey.currentContext!.go(route); await $.pumpAndSettle(); Future.delayed(const Duration(milliseconds: 500)); await $.waitUntilExists($(AppBar)); final PatrolFinder appBar = $(title); expect(appBar, findsOneWidget); } await Future.delayed(const Duration(milliseconds: 500)); }, ); } static Future containEntries() async { patrolWidgetTest( 'HomeMenu contém seus itens?', // (PatrolTester tester) async { $ = tester; await _logged(); await $.pumpWidgetAndSettle(const App()); await $.waitUntilVisible($(MenuStaggeredView)); await Future.delayed(const Duration(seconds: 1)); await $.waitUntilVisible($(MenuStaggeredView)); await $.waitUntilVisible($(GridView)); final PatrolFinder gridEntries = $(GridView).$(ButtonMenuItem); expect(gridEntries, findsWidgets); final List menuKeys = gridEntries .evaluate() .map((element) { final key = element.widget.key; if (key is ValueKey) { return key.value; } return null; }) .where((key) => key != null) .toList(); await $.pumpAndSettle(); final List entries = MenuEntry.entries; await $.pumpAndSettle(); final List entriesKey = entries .where((entry) => entry.types.contains(MenuEntryType.Home)) .map((entry) => entry.key) .toList(); await $.pumpAndSettle(); expect(entriesKey, containsAll(menuKeys)); await Future.delayed(const Duration(milliseconds: 500)); }, ); patrolWidgetTest( 'DrawerMenu contém seus itens?', // (PatrolTester tester) async { $ = tester; await _logged(); await $.pumpWidgetAndSettle(const App()); await $.waitUntilVisible($(MenuStaggeredView)); await Future.delayed(const Duration(seconds: 1)); await $.waitUntilVisible($(MenuStaggeredView)); await $.waitUntilVisible($(GridView)); final PatrolFinder gridEntries = $(GridView).$(ButtonMenuItem); expect(gridEntries, findsWidgets); await $(Icons.menu_rounded).waitUntilVisible().tap(); await $.waitUntilVisible($(ListView)); final PatrolFinder listEntries = $(ListView).$(CardMenuItem); expect(listEntries, findsWidgets); final List menuKeys = listEntries .evaluate() .map((element) { final key = element.widget.key; if (key is ValueKey) { return key.value; } return null; }) .where((key) => key != null) .toList(); await $.pumpAndSettle(); final List entries = MenuEntry.entries; await $.pumpAndSettle(); final List entriesKey = entries .where((entry) => entry.types.contains(MenuEntryType.Drawer)) .map((entry) => entry.key) .toList(); await $.pumpAndSettle(); expect(entriesKey, containsAll(menuKeys)); await Future.delayed(const Duration(milliseconds: 500)); }, ); } static Future navToEntries() async { patrolWidgetTest( 'Navegação entre items do Menu', (PatrolTester tester) async { $ = tester; await _logged(); await $.pumpWidgetAndSettle(const App()); await $.waitUntilVisible($(MenuStaggeredView)); final PatrolFinder profile = $(const Key('AsyncLocalProfileComponentWidget_InkWell')); await $(profile) .waitUntilVisible() .tap(settlePolicy: SettlePolicy.noSettle); await $.waitUntilVisible($(BottomArrowLinkedLocalsComponentWidget)); final PatrolFinder local = $('FRE ACCESS DEMO'); await $(local) .waitUntilVisible() .tap(settlePolicy: SettlePolicy.noSettle); await $.waitUntilVisible($(MenuStaggeredView)); final Finder gridView = find.byType(GridView); await $.waitUntilVisible(gridView); final Finder gridEntries = find.descendant( of: gridView, matching: find.byType(ButtonMenuItem), ); await $.pumpAndSettle(); expect(gridEntries, findsWidgets); final int gridEntriesCount = gridEntries.evaluate().length; await $.pumpAndSettle(); for (int i = 0; i < gridEntriesCount; i++) { await $.waitUntilVisible( $(MenuStaggeredView), timeout: Duration(seconds: 1), ); await $.waitUntilVisible( gridView, timeout: Duration(seconds: 1), ); await $.waitUntilVisible( gridEntries.at(i), timeout: Duration(seconds: 1), ); final ButtonMenuItem entry = $.tester.widget(gridEntries.at(i)); final Key? widgetKey = entry.key; expect(widgetKey, isNotNull); print('WIDGETKEY = $widgetKey'); if (widgetKey == ValueKey('FRE-HUB-FASTPASS')) continue; if (widgetKey == ValueKey('FRE-HUB-QRCODE')) continue; if (widgetKey == ValueKey('FRE-HUB-RESERVATIONS')) continue; if (widgetKey == ValueKey('FRE-HUB-SETTINGS')) continue; await $(gridEntries.at(i)) .waitUntilVisible(timeout: const Duration(seconds: 1)) .tap( settleTimeout: const Duration(seconds: 1), settlePolicy: SettlePolicy.noSettle, ); await $.pumpAndSettle(duration: Duration(milliseconds: 500)); await $(Icons.keyboard_arrow_left) .waitUntilVisible(timeout: const Duration(seconds: 1)) .tap( settleTimeout: const Duration(seconds: 1), settlePolicy: SettlePolicy.noSettle, ); await $.pumpAndSettle(duration: Duration(milliseconds: 500)); } }, ); } }