diff --git a/Makefile b/Makefile index 98e441d..981eab3 100644 --- a/Makefile +++ b/Makefile @@ -108,4 +108,4 @@ web_build_and_host: file_test: @reset - @flutter test test/shared/widgets/mobile_footer_tests.dart + @flutter test test/ diff --git a/lib/home/sections/custom_webview.dart b/lib/home/sections/custom_webview.dart new file mode 100644 index 0000000..d727124 --- /dev/null +++ b/lib/home/sections/custom_webview.dart @@ -0,0 +1,42 @@ +import 'package:faucet/shared/extended-libraries/webviewx/providers/webview_provider.dart'; +import 'package:faucet/shared/extended-libraries/webviewx/src/utils/source_type.dart'; +import 'package:faucet/shared/extended-libraries/webviewx/src/view/impl/web.dart'; +import 'package:flutter/material.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:responsive_framework/responsive_breakpoints.dart'; + +class CustomWebview extends HookConsumerWidget { + static const recaptchaWidgetKey = Key('recaptcha-widget'); + const CustomWebview({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final initialContent = '
'; + final isMobile = ResponsiveBreakpoints.of(context).equals(MOBILE); + + final webView = ref.watch(webViewProvider); + final webViewNotifier = ref.watch(webViewProvider.notifier); + + return Stack( + children: [ + WebViewX( + key: recaptchaWidgetKey, + initialContent: initialContent, + initialSourceType: SourceType.html, + height: isMobile ? 110 : 220, + width: isMobile ? 200 : 440, + onWebViewCreated: (controller) => webViewNotifier.setController(controller), + dartCallBacks: const {}, + ), + webView.when( + data: (data) { + webViewNotifier.loadContent(data); + return Container(); + }, + error: (error, st) => const Center(child: Text('Error loading WebView')), + loading: () => const Center(child: CircularProgressIndicator()), + ) + ], + ); + } +} diff --git a/lib/home/sections/get_test_tokens.dart b/lib/home/sections/get_test_tokens.dart index 96c0939..b87b3f4 100644 --- a/lib/home/sections/get_test_tokens.dart +++ b/lib/home/sections/get_test_tokens.dart @@ -4,19 +4,18 @@ import 'package:faucet/requests/providers/requests_provider.dart'; import 'package:faucet/shared/constants/network_name.dart'; import 'package:faucet/shared/constants/status.dart'; import 'package:faucet/shared/constants/strings.dart'; +import 'package:faucet/shared/extended-libraries/webviewx/providers/webview_provider.dart'; import 'package:faucet/shared/theme.dart'; import 'package:faucet/shared/utils/theme_color.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:responsive_framework/responsive_breakpoints.dart'; import 'package:fluttertoast/fluttertoast.dart'; -import 'package:faucet/shared/extended-libraries/webviewx/src/utils/source_type.dart'; -import 'package:faucet/shared/extended-libraries/webviewx/src/utils/utils.dart'; -import 'package:faucet/shared/extended-libraries/webviewx/src/view/impl/web.dart'; import 'package:faucet/shared/extended-libraries/webviewx/src/controller/controller.dart'; +import 'custom_webview.dart'; + class GetTestTokens extends HookConsumerWidget { static const getTestTokensKey = Key('getTestTokensKey'); static const lvlInputKey = Key('lvlInputKey'); @@ -30,172 +29,162 @@ class GetTestTokens extends HookConsumerWidget { final toast = FToast(); String? selectedNetwork = 'Valhalla'; - late WebViewXController webviewController; + bool isWebViewControllerInitialized = false; final initialContent = '
'; - /// validate is used to validate the input field bool validate = false; - - /// validate is used to validate the input field - Future verifyToken(token) async { - final callbackResponse = await webviewController.callJsMethod('callDartCallback', []); - token.value = callbackResponse.toString(); - } + bool isWebViewXInitialized = false; @override Widget build(BuildContext context, WidgetRef ref) { final isMobile = ResponsiveBreakpoints.of(context).equals(MOBILE); final notifier = ref.watch(requestProvider.notifier); - final token = useState(''); - useEffect(() { - Future.delayed(const Duration(seconds: 1), () { - webviewController.loadContent( - 'http://localhost:PORT/assets/webpages/index.html', //REPLACE PORT with local port - SourceType.url, - ); - }); - return null; - }, []); + final webViewInitialized = ref.watch(webViewInitializedProvider); + final token = ref.watch(tokenProvider.notifier); - return Container( - decoration: BoxDecoration(color: getSelectedColor(colorTheme, 0xFFFFFFFF, 0xFF282A2C)), + Future verifyToken(token) async { + final callbackResponse = await webviewController.callJsMethod('callDartCallback', []); + token.setToken(callbackResponse.toString()); + } + + return SingleChildScrollView( child: Padding( padding: EdgeInsets.all(isMobile ? 16.0 : 40.0), - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - Strings.getTestNetwork, - style: headlineLarge(context), - ), - const SizedBox( - height: 48, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + Strings.getTestNetwork, + style: headlineLarge(context), + ), + const SizedBox( + height: 48, + ), + Container( + height: 64, + width: 560, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: const Color.fromRGBO(112, 64, 236, 0.04), ), - Container( - height: 64, - width: 560, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: const Color.fromRGBO(112, 64, 236, 0.04), - ), - child: Row( - children: [ - const SizedBox(width: 16), - Icon( - Icons.warning_amber, - color: getSelectedColor(colorTheme, 0xFF7040EC, 0xFF7040EC), - size: 24, - ), - const SizedBox(width: 16), - Expanded( - child: SizedBox( - width: 450, - child: Text( - 'Confirm details before submitting', - style: TextStyle( - fontSize: 14, - fontFamily: 'Rational Display', - fontWeight: FontWeight.w300, - color: getSelectedColor(colorTheme, 0xFF7040EC, 0xFF7040EC), - ), + child: Row( + children: [ + const SizedBox(width: 16), + Icon( + Icons.warning_amber, + color: getSelectedColor(colorTheme, 0xFF7040EC, 0xFF7040EC), + size: 24, + ), + const SizedBox(width: 16), + Expanded( + child: SizedBox( + width: 450, + child: Text( + 'Confirm details before submitting', + style: TextStyle( + fontSize: 14, + fontFamily: 'Rational Display', + fontWeight: FontWeight.w300, + color: getSelectedColor(colorTheme, 0xFF7040EC, 0xFF7040EC), ), ), ), - ], - ), - ), - const SizedBox( - height: 48, + ), + ], ), - TextField( - key: lvlInputKey, - controller: TextEditingController(text: 'LVL'), - enabled: false, - style: bodyMedium(context), - decoration: InputDecoration( - labelText: 'Tokens', - labelStyle: bodyMedium(context), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - borderSide: BorderSide( - color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), - ), + ), + const SizedBox( + height: 48, + ), + TextField( + key: lvlInputKey, + controller: TextEditingController(text: 'LVL'), + enabled: false, + style: bodyMedium(context), + decoration: InputDecoration( + labelText: 'Tokens', + labelStyle: bodyMedium(context), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + borderSide: BorderSide( + color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), ), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - borderSide: BorderSide( - color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), - ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + borderSide: BorderSide( + color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), ), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - borderSide: BorderSide( - color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), - ), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + borderSide: BorderSide( + color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), ), ), ), - const SizedBox( - height: 24, - ), - CustomTestNetwork( - key: selectNetworkKey, - ), - const SizedBox( - height: 24, - ), - TextField( - key: addressInputKey, - controller: textWalletEditingController, - style: bodyMedium(context), - decoration: InputDecoration( - labelText: 'Wallet Address', - labelStyle: bodyMedium(context), - hintText: '0xxxxxxxxxxxxxxxxxxxxxxxxx', - suffix: TextButton( - style: TextButton.styleFrom( - foregroundColor: const Color(0xFFC0C4C4), - padding: const EdgeInsets.all(16.0), - textStyle: const TextStyle(fontSize: 16), - ), - onPressed: () async { - final copiedData = await Clipboard.getData('text/plain'); - textWalletEditingController.value = TextEditingValue( - text: copiedData?.text ?? '', - selection: TextSelection.fromPosition( - TextPosition(offset: copiedData?.text?.length ?? 0), - ), - ); - }, - child: const Text('Paste'), + ), + const SizedBox( + height: 24, + ), + CustomTestNetwork( + key: selectNetworkKey, + ), + const SizedBox( + height: 24, + ), + TextField( + key: addressInputKey, + controller: textWalletEditingController, + style: bodyMedium(context), + decoration: InputDecoration( + labelText: 'Wallet Address', + labelStyle: bodyMedium(context), + hintText: '0xxxxxxxxxxxxxxxxxxxxxxxxx', + suffix: TextButton( + style: TextButton.styleFrom( + foregroundColor: const Color(0xFFC0C4C4), + padding: const EdgeInsets.all(16.0), + textStyle: const TextStyle(fontSize: 16), ), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - borderSide: BorderSide( - color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), - ), + onPressed: () async { + final copiedData = await Clipboard.getData('text/plain'); + textWalletEditingController.value = TextEditingValue( + text: copiedData?.text ?? '', + selection: TextSelection.fromPosition( + TextPosition(offset: copiedData?.text?.length ?? 0), + ), + ); + }, + child: const Text('Paste'), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + borderSide: BorderSide( + color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), ), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - borderSide: BorderSide( - color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), - ), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + borderSide: BorderSide( + color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), ), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - borderSide: BorderSide( - color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), - ), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + borderSide: BorderSide( + color: getSelectedColor(colorTheme, 0xFFC0C4C4, 0xFF858E8E), ), ), ), - const SizedBox( - height: 8, - ), - Stack(children: [ + ), + const SizedBox( + height: 8, + ), + Stack( + children: [ SizedBox( child: Row( mainAxisAlignment: MainAxisAlignment.end, @@ -210,86 +199,78 @@ class GetTestTokens extends HookConsumerWidget { SizedBox( height: !isMobile ? 30 : null, ), - WebViewX( - key: recaptchaWidgetKey, - initialContent: initialContent, - initialSourceType: SourceType.html, - height: 220, - width: 400, - onWebViewCreated: (controller) => webviewController = controller, - dartCallBacks: const {}, - ), - ]), - Padding( - padding: const EdgeInsets.only(top: 64.0), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Expanded( - child: SizedBox( - width: isMobile ? 100 : 272, - height: 56, - child: TextButton( - onPressed: () { - Navigator.pop(context); - }, - child: Text( - 'Cancel', - style: titleSmall(context), - )), - ), - ), - const SizedBox( - width: 16, - ), - Expanded( - child: SizedBox( - width: isMobile ? 100 : 272, - height: 56, - child: ElevatedButton( - key: requestTokenButtonKey, - onPressed: () async { - await verifyToken(token); - if (token.value.isEmpty) { - // ignore: use_build_context_synchronously - errorDialogBuilder(context, 'Please verify reCaptcha'); - } else { - // ignore: use_build_context_synchronously - notifier.makeRequest( - context, - Request( - network: NetworkName.testnet, - walletAddress: textWalletEditingController.text, - status: Status.confirmed, - dateTime: DateTime.now(), - tokensDisbursed: 100, - ), - ); - } + if (webViewInitialized) const CustomWebview(), + ], + ), + Padding( + padding: const EdgeInsets.only(top: 64.0), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Expanded( + child: SizedBox( + width: isMobile ? 100 : 272, + height: 56, + child: TextButton( + onPressed: () { + Navigator.pop(context); }, - style: ButtonStyle( - backgroundColor: MaterialStateProperty.all( - const Color(0xFF0DC8D4), - ), - shape: MaterialStateProperty.all( - RoundedRectangleBorder( - borderRadius: BorderRadius.circular(16), + child: Text( + 'Cancel', + style: titleSmall(context), + )), + ), + ), + const SizedBox( + width: 16, + ), + Expanded( + child: SizedBox( + width: isMobile ? 100 : 272, + height: 56, + child: ElevatedButton( + key: requestTokenButtonKey, + onPressed: () async { + await verifyToken(token); + if (token.state.isEmpty) { + // ignore: use_build_context_synchronously + errorDialogBuilder(context, 'Please verify reCaptcha'); + } else { + // ignore: use_build_context_synchronously + notifier.makeRequest( + context, + Request( + network: NetworkName.testnet, + walletAddress: textWalletEditingController.text, + status: Status.confirmed, + dateTime: DateTime.now(), + tokensDisbursed: 100, ), - ), + ); + } + }, + style: ButtonStyle( + backgroundColor: MaterialStateProperty.all( + const Color(0xFF0DC8D4), ), - child: Text( - Strings.getLVL, - style: titleSmall(context)!.copyWith(color: Colors.white), + shape: MaterialStateProperty.all( + RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + ), ), ), + child: Text( + Strings.getLVL, + style: titleSmall(context)!.copyWith(color: Colors.white), + ), ), ), - ], - ), - ) - ], - ), + ), + ], + ), + ), + ], ), ), ); diff --git a/lib/shared/extended-libraries/webviewx/providers/webview_provider.dart b/lib/shared/extended-libraries/webviewx/providers/webview_provider.dart new file mode 100644 index 0000000..cfd4c46 --- /dev/null +++ b/lib/shared/extended-libraries/webviewx/providers/webview_provider.dart @@ -0,0 +1,47 @@ +import 'package:faucet/shared/extended-libraries/webviewx/src/controller/interface.dart'; +import 'package:faucet/shared/extended-libraries/webviewx/src/utils/source_type.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; + +final webViewProvider = StateNotifierProvider>>((ref) { + return WebViewNotifier(); +}); + +class WebViewNotifier extends StateNotifier>> { + WebViewNotifier() : super(const AsyncLoading()); + + setController(WebViewXController controller) { + state = AsyncData(controller); + } + + loadContent(WebViewXController controller) async { + await controller.loadContent( + 'http://localhost:PORT/assets/webpages/index.html', + SourceType.url, + ); + } +} + +class WebViewInitializedState extends StateNotifier { + WebViewInitializedState() : super(false); + + Future initializeWebView() async { + await Future.delayed(const Duration(seconds: 1)); + state = true; + } +} + +final webViewInitializedProvider = StateNotifierProvider((ref) { + final webViewState = WebViewInitializedState(); + webViewState.initializeWebView(); + return webViewState; +}); + +class TokenNotifier extends StateNotifier { + TokenNotifier() : super(''); + + void setToken(String newToken) { + state = newToken; + } +} + +final tokenProvider = StateNotifierProvider((ref) => TokenNotifier()); diff --git a/lib/shared/extended-libraries/webviewx/src/controller/impl/web.dart b/lib/shared/extended-libraries/webviewx/src/controller/impl/web.dart index 7f3f165..34e535b 100644 --- a/lib/shared/extended-libraries/webviewx/src/controller/impl/web.dart +++ b/lib/shared/extended-libraries/webviewx/src/controller/impl/web.dart @@ -1,6 +1,5 @@ import 'dart:async' show Future; -// ignore: avoid_web_libraries_in_flutter -import 'dart:js' as js; +import 'package:universal_html/js.dart' as js; import 'package:faucet/shared/extended-libraries/webviewx/src/utils/logger.dart'; import 'package:faucet/shared/extended-libraries/webviewx/src/utils/source_type.dart'; @@ -222,13 +221,15 @@ class WebViewXController extends ChangeNotifier implements i.WebViewXController< /// Retrieves the inner page title @override Future getTitle() { - return Future.value(connector["document"]["title"].toString()); + final Map connectorMap = connector as Map; + return Future.value(connectorMap["document"]["title"].toString()); } /// Clears cache @override Future clearCache() { - connector["localStorage"].callMethod("clear", []); + final Map connectorMap = connector as Map; + connectorMap["localStorage"].callMethod("clear", []); evalRawJavascript( 'caches.keys().then((keyList) => Promise.all(keyList.map((key) => caches.delete(key))))', ); diff --git a/lib/shared/extended-libraries/webviewx/src/view/impl/web.dart b/lib/shared/extended-libraries/webviewx/src/view/impl/web.dart index a389ef5..6a05d21 100644 --- a/lib/shared/extended-libraries/webviewx/src/view/impl/web.dart +++ b/lib/shared/extended-libraries/webviewx/src/view/impl/web.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:html' as html; -import 'dart:js' as js; +import 'package:universal_html/html.dart' as html; +import 'package:universal_html/js.dart' as js; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -46,8 +46,7 @@ class WebViewX extends StatefulWidget implements view_interface.WebViewX { /// Callback which returns a referrence to the [WebViewXController] /// being created. @override - final Function(ctrl_interface.WebViewXController controller)? - onWebViewCreated; + final Function(ctrl_interface.WebViewXController controller)? onWebViewCreated; /// A set of [EmbeddedJsContent]. /// @@ -123,8 +122,7 @@ class WebViewX extends StatefulWidget implements view_interface.WebViewX { this.dartCallBacks = const {}, this.ignoreAllGestures = false, this.javascriptMode = JavascriptMode.unrestricted, - this.initialMediaPlaybackPolicy = - AutoMediaPlaybackPolicy.requireUserActionForAllMediaTypes, + this.initialMediaPlaybackPolicy = AutoMediaPlaybackPolicy.requireUserActionForAllMediaTypes, this.onPageStarted, this.onPageFinished, this.navigationDelegate, @@ -163,8 +161,7 @@ class _WebViewXState extends State { if (widget.initialSourceType == SourceType.html || widget.initialSourceType == SourceType.urlBypass || - (widget.initialSourceType == SourceType.url && - widget.initialContent == 'about:blank')) { + (widget.initialSourceType == SourceType.url && widget.initialContent == 'about:blank')) { _connectJsToFlutter(then: _callOnWebViewCreatedCallback); } else { _callOnWebViewCreatedCallback(); @@ -218,58 +215,6 @@ class _WebViewXState extends State { webViewXController.connector = jsWindowObject; then?.call(); - - /* - // Registering the same events as we already do inside - // HtmlUtils.embedClickListenersInPageSource(), but in Dart. - // So far it seems to be working, but needs more testing. - - jsWindowObject.callMethod('addEventListener', [ - "click", - js.allowInterop((event) { - final href = jsWindowObject["document"]["activeElement"]["href"].toString(); - print(href); - }) - ]); - - jsWindowObject.callMethod('addEventListener', [ - "submit", - js.allowInterop((event) { - final form = jsWindowObject["document"]["activeElement"]["form"]; - - final method = form["method"].toString(); - - if (method == 'get') { - final action = jsWindowObject.callMethod( - 'eval', - [ - "document.activeElement.form.action + '?' + new URLSearchParams(new FormData(document.activeElement.form))" - ], - ).toString(); - print(action); - } else { - // post - final action = form["action"].toString(); - - final formData = jsWindowObject - .callMethod( - 'eval', - ["[...new FormData(document.activeElement.form)]"], - ) - .toString() - .split(','); - - final mappedFields = {}; - for (var i = 0; i < formData.length; i++) { - if (i % 2 != 0) { - mappedFields[formData[i - 1]] = formData[i]; - } - } - print(mappedFields); - } - }) - ]); - */ }; } @@ -362,8 +307,7 @@ class _WebViewXState extends State { final allow = widget.webSpecificParams.additionalAllowOptions; - if (widget.initialMediaPlaybackPolicy == - AutoMediaPlaybackPolicy.alwaysAllow) { + if (widget.initialMediaPlaybackPolicy == AutoMediaPlaybackPolicy.alwaysAllow) { allow.add('autoplay'); } @@ -459,8 +403,7 @@ class _WebViewXState extends State { final href = dartObj['href'] as String; _debugLog(dartObj.toString()); - if (!await _checkNavigationAllowed( - href, webViewXController.value.sourceType)) { + if (!await _checkNavigationAllowed(href, webViewXController.value.sourceType)) { _debugLog('Navigation not allowed for source:\n$href\n'); return; } diff --git a/pubspec.yaml b/pubspec.yaml index 25e3e7f..8a094bb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,7 +58,7 @@ dependencies: collection: ^1.17.2 pointer_interceptor: ^0.9.3+5 easy_web_view: ^1.6.0 - + universal_html: ^2.2.4 dev_dependencies: flutter_test: diff --git a/test/requests/desktop_request_failed_test.dart b/test/requests/desktop_request_failed_test.dart index a4f299e..71e1529 100644 --- a/test/requests/desktop_request_failed_test.dart +++ b/test/requests/desktop_request_failed_test.dart @@ -6,6 +6,7 @@ import 'package:flutter_test/flutter_test.dart'; import '../essential_test_provider_widget.dart'; import '../required_test_class.dart'; +import '../utils/tester_utils.dart'; import 'required_request_tests.dart'; import 'utils/mock_request_hive_utils.dart'; @@ -18,40 +19,60 @@ void main() async { await requestTests.runTests(); } -Future invalidTestTokenRequest(TestScreenSizes testScreenSize) async => testWidgets( - 'Desktop - Should fail on invalid test token request', +Future invalidTestTokenRequest(TestScreenSizes testScreenSize) async => + testWidgets('Should fail on invalid test token request', (WidgetTester tester) async { (WidgetTester tester) async { await tester.pumpWidget( - await essentialTestProviderWidget(tester: tester, testScreenSize: testScreenSize, overrides: [ - hivePackageProvider.overrideWithValue( - getMockRequestHive().mockHive, - ), - ]), + await essentialTestProviderWidget( + tester: tester, + testScreenSize: testScreenSize, + overrides: [hivePackageProvider.overrideWithValue(getMockRequestHive().mockHive)], + ), ); + await tester.pumpAndSettle(); - // click request token button await tester.ensureVisible(find.byKey(TransactionTableScreen.requestTokensKey)); - await tester.pumpAndSettle(); - await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); - await tester.pumpAndSettle(); - // check that the drawer is displayed - expect(find.byKey(GetTestTokens.getTestTokensKey), findsOneWidget); - // click the request token button - var requestTokenButton = find.byKey(GetTestTokens.requestTokenButtonKey); - await tester.ensureVisible(requestTokenButton); + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); + }); + + await tester.pump(); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + + await tester.pump(); + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + await tester.pumpAndSettle(); - await tester.tap(requestTokenButton); + await tester.pump(); + + await customRunAsync(tester, test: () async { + expect((find.byKey(SuccessDialog.requestSuccessDialogKey)), findsOneWidget); + }); + await tester.pumpAndSettle(); - await tester.ensureVisible(find.byKey(SuccessDialog.requestSuccessDialogKey)); - // first time success message - expect(find.byKey(SuccessDialog.requestSuccessDialogKey), findsOneWidget); - // find close button await tester.tap(find.byKey(SuccessDialog.closeSuccessDialogKey)); await tester.pumpAndSettle(); - await tester.pumpAndSettle(); - await tester.tap(requestTokenButton); - await tester.pumpAndSettle(const Duration(seconds: 1)); - expect(find.byKey(ErrorDialog.requestErrorDialogKey), findsOneWidget); - }, - ); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + await tester.pump(); + + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + + await tester.pump(); + await customRunAsync(tester, test: () async { + expect((find.byKey(ErrorDialog.requestErrorDialogKey)), findsOneWidget); + }); + }; + }); diff --git a/test/requests/desktop_request_success_test.dart b/test/requests/desktop_request_success_test.dart new file mode 100644 index 0000000..6f1e957 --- /dev/null +++ b/test/requests/desktop_request_success_test.dart @@ -0,0 +1,66 @@ +import 'package:faucet/home/sections/get_test_tokens.dart'; +import 'package:faucet/requests/providers/requests_provider.dart'; +import 'package:faucet/shared/services/hive/hive_service.dart'; +import 'package:faucet/transactions/sections/transaction_table.dart'; +import 'package:flutter_test/flutter_test.dart'; +import '../essential_test_provider_widget.dart'; +import '../required_test_class.dart'; +import '../utils/tester_utils.dart'; +import 'utils/mock_request_hive_utils.dart'; + +class DesktopRequestSuccessTokensTest extends RequiredTest { + Future Function(TestScreenSizes testScreenSize) requestTokenTest; + + DesktopRequestSuccessTokensTest({ + required this.requestTokenTest, + required super.testScreenSize, + }); + + Future runTests() async { + await requestTokenTest(testScreenSize); + } +} + +void main() async { + final requestTests = DesktopRequestSuccessTokensTest( + requestTokenTest: (testScreenSize) => requestTokenTest(testScreenSize), + testScreenSize: TestScreenSizes.desktop, + ); + + await requestTests.runTests(); +} + +Future requestTokenTest(TestScreenSizes testScreenSize) async => + testWidgets('Should confirm that tokens are requested ${testScreenSize.name}', (WidgetTester tester) async { + (WidgetTester tester) async { + await tester.pumpWidget( + await essentialTestProviderWidget( + tester: tester, + testScreenSize: testScreenSize, + overrides: [hivePackageProvider.overrideWithValue(getMockRequestHive().mockHive)], + ), + ); + await tester.pumpAndSettle(); + await tester.ensureVisible(find.byKey(TransactionTableScreen.requestTokensKey)); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); + }); + await tester.pump(); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + await tester.pump(); + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + await tester.pumpAndSettle(); + await tester.pump(); + await customRunAsync(tester, test: () async { + expect((find.byKey(SuccessDialog.requestSuccessDialogKey)), findsOneWidget); + }); + await tester.pumpAndSettle(); + }; + }); diff --git a/test/requests/mobile_request_failed_test.dart b/test/requests/mobile_request_failed_test.dart index c487bc2..43dabab 100644 --- a/test/requests/mobile_request_failed_test.dart +++ b/test/requests/mobile_request_failed_test.dart @@ -2,11 +2,10 @@ import 'package:faucet/home/sections/get_test_tokens.dart'; import 'package:faucet/requests/providers/requests_provider.dart'; import 'package:faucet/shared/services/hive/hive_service.dart'; import 'package:faucet/transactions/sections/transaction_table.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter_test/flutter_test.dart'; - import '../essential_test_provider_widget.dart'; import '../required_test_class.dart'; +import '../utils/tester_utils.dart'; import 'required_request_tests.dart'; import 'utils/mock_request_hive_utils.dart'; @@ -19,40 +18,58 @@ void main() async { await requestTests.runTests(); } -Future invalidTestTokenRequest(TestScreenSizes testScreenSize) async => testWidgets( - 'Mobile - Should fail on invalid test token request', +Future invalidTestTokenRequest(TestScreenSizes testScreenSize) async => + testWidgets('Mobile - Should fail on invalid test token request', (WidgetTester tester) async { (WidgetTester tester) async { await tester.pumpWidget( - await essentialTestProviderWidget(tester: tester, testScreenSize: testScreenSize, overrides: [ - hivePackageProvider.overrideWithValue( - getMockRequestHive().mockHive, - ), - ]), + await essentialTestProviderWidget( + tester: tester, + testScreenSize: testScreenSize, + overrides: [hivePackageProvider.overrideWithValue(getMockRequestHive().mockHive)], + ), ); + await tester.pumpAndSettle(); - // click request token button await tester.ensureVisible(find.byKey(TransactionTableScreen.requestTokensKey)); - await tester.pumpAndSettle(); - await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); - await tester.pumpAndSettle(); - // check that the drawer is displayed - expect(find.byKey(GetTestTokens.getTestTokensKey), findsOneWidget); - // click the request token button - var requestTokenButton = find.byKey(GetTestTokens.requestTokenButtonKey); - await tester.ensureVisible(requestTokenButton); + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); + await Future.delayed(const Duration(milliseconds: 700)); + }); + await tester.pump(); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + await tester.pump(); + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + await tester.pumpAndSettle(); - await tester.tap(requestTokenButton); + await tester.pump(); + + await customRunAsync(tester, test: () async { + expect((find.byKey(SuccessDialog.requestSuccessDialogKey)), findsOneWidget); + }); + await tester.pumpAndSettle(); - await tester.ensureVisible(find.byKey(SuccessDialog.requestSuccessDialogKey)); - // first time success message - expect(find.byKey(SuccessDialog.requestSuccessDialogKey), findsOneWidget); - // find close button await tester.tap(find.byKey(SuccessDialog.closeSuccessDialogKey)); await tester.pumpAndSettle(); - await tester.pumpAndSettle(); - await tester.tap(requestTokenButton); - await tester.pumpAndSettle(const Duration(seconds: 1)); - expect(find.byKey(ErrorDialog.requestErrorDialogKey), findsOneWidget); - }, - ); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + await tester.pump(); + + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + await tester.pump(); + await customRunAsync(tester, test: () async { + expect((find.byKey(ErrorDialog.requestErrorDialogKey)), findsOneWidget); + }); + }; + }); diff --git a/test/requests/mobile_request_success_test.dart b/test/requests/mobile_request_success_test.dart new file mode 100644 index 0000000..0bf32d7 --- /dev/null +++ b/test/requests/mobile_request_success_test.dart @@ -0,0 +1,67 @@ +import 'package:faucet/home/sections/get_test_tokens.dart'; +import 'package:faucet/requests/providers/requests_provider.dart'; +import 'package:faucet/shared/services/hive/hive_service.dart'; +import 'package:faucet/transactions/sections/transaction_table.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../essential_test_provider_widget.dart'; +import '../required_test_class.dart'; +import '../utils/tester_utils.dart'; +import 'utils/mock_request_hive_utils.dart'; + +class MobileRequestSuccessTokensTest extends RequiredTest { + Future Function(TestScreenSizes testScreenSize) requestTokenTest; + + MobileRequestSuccessTokensTest({ + required this.requestTokenTest, + required super.testScreenSize, + }); + + Future runTests() async { + await requestTokenTest(testScreenSize); + } +} + +void main() async { + final requestTests = MobileRequestSuccessTokensTest( + requestTokenTest: (testScreenSize) => requestTokenTest(testScreenSize), + testScreenSize: TestScreenSizes.mobile, + ); + await requestTests.runTests(); +} + +Future requestTokenTest(TestScreenSizes testScreenSize) async => + testWidgets('Should confirm that tokens are requested ${testScreenSize.name}', (WidgetTester tester) async { + (WidgetTester tester) async { + await tester.pumpWidget( + await essentialTestProviderWidget( + tester: tester, + testScreenSize: testScreenSize, + overrides: [hivePackageProvider.overrideWithValue(getMockRequestHive().mockHive)], + ), + ); + + await tester.pumpAndSettle(); + await tester.ensureVisible(find.byKey(TransactionTableScreen.requestTokensKey)); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); + }); + await tester.pump(); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + await tester.pump(); + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + await tester.pumpAndSettle(); + await tester.pump(); + await customRunAsync(tester, test: () async { + expect((find.byKey(SuccessDialog.requestSuccessDialogKey)), findsOneWidget); + }); + await tester.pumpAndSettle(); + }; + }); diff --git a/test/requests/open_request_menu_test.dart b/test/requests/open_request_menu_test.dart index 7275332..aefab41 100644 --- a/test/requests/open_request_menu_test.dart +++ b/test/requests/open_request_menu_test.dart @@ -1,40 +1,54 @@ -import 'package:faucet/transactions/sections/transaction_table.dart'; import 'package:faucet/home/sections/get_test_tokens.dart'; -import 'package:flutter/cupertino.dart'; +import 'package:faucet/shared/services/hive/hive_service.dart'; +import 'package:faucet/transactions/sections/transaction_table.dart'; import 'package:flutter_test/flutter_test.dart'; import '../essential_test_provider_widget.dart'; import '../required_test_class.dart'; -import './required_request_tests.dart'; +import '../utils/tester_utils.dart'; +import 'utils/mock_request_hive_utils.dart'; + +class RequiredRequestTokensTest extends RequiredTest { + Future Function(TestScreenSizes testScreenSize) requestTokenTest; + + RequiredRequestTokensTest({ + required this.requestTokenTest, + required super.testScreenSize, + }); + + Future runTests() async { + await requestTokenTest(testScreenSize); + } +} void main() async { - final requestsTests = RequiredRequestsTests( - menuOpened: (testScreenSize) => menuOpened(testScreenSize), + final requestTests = RequiredRequestTokensTest( + requestTokenTest: (testScreenSize) => requestTokenTest(testScreenSize), testScreenSize: TestScreenSizes.desktop, ); - await requestsTests.runTests(); + await requestTests.runTests(); } -Future menuOpened(TestScreenSizes testScreenSize) async { - testWidgets('Request tokens menu should appear', (WidgetTester tester) async { - await tester.pumpWidget( - await essentialTestProviderWidget( - tester: tester, - testScreenSize: testScreenSize, - ), - ); - await tester.pumpAndSettle(); - - final scrollable = find.byKey(const Key("transactionTableKey")); - expect(scrollable, findsOneWidget); - var button = find.byKey(TransactionTableScreen.requestTokensKey); - await tester.ensureVisible(button); - expect(button, findsOneWidget); - - await tester.tap(button); - await tester.pumpAndSettle(const Duration(seconds: 2)); - - expect(find.byKey(GetTestTokens.getTestTokensKey), findsOneWidget); - }); -} +Future requestTokenTest(TestScreenSizes testScreenSize) async => + testWidgets('Should confirm that tokens are requested ${testScreenSize.name}', (WidgetTester tester) async { + await tester.pumpWidget( + await essentialTestProviderWidget( + tester: tester, + testScreenSize: testScreenSize, + overrides: [hivePackageProvider.overrideWithValue(getMockRequestHive().mockHive)], + ), + ); + await tester.pumpAndSettle(); + // click request token button + await tester.ensureVisible(find.byKey(TransactionTableScreen.requestTokensKey)); + + await tester.pumpAndSettle(); + await pumpTester(tester, loops: 100); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); + }); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsOneWidget); + }); diff --git a/test/requests/tablet_request_failed_test.dart b/test/requests/tablet_request_failed_test.dart index 0a3de4b..175be1d 100644 --- a/test/requests/tablet_request_failed_test.dart +++ b/test/requests/tablet_request_failed_test.dart @@ -7,6 +7,7 @@ import 'package:flutter_test/flutter_test.dart'; import '../essential_test_provider_widget.dart'; import '../required_test_class.dart'; +import '../utils/tester_utils.dart'; import 'required_request_tests.dart'; import 'utils/mock_request_hive_utils.dart'; @@ -19,40 +20,63 @@ void main() async { await requestTests.runTests(); } -Future invalidTestTokenRequest(TestScreenSizes testScreenSize) async => testWidgets( - 'Tablet - Should fail on invalid test token request', +Future invalidTestTokenRequest(TestScreenSizes testScreenSize) async => + testWidgets('Tablet - Should fail on invalid test token request', (WidgetTester tester) async { (WidgetTester tester) async { await tester.pumpWidget( - await essentialTestProviderWidget(tester: tester, testScreenSize: testScreenSize, overrides: [ - hivePackageProvider.overrideWithValue( - getMockRequestHive().mockHive, - ), - ]), + await essentialTestProviderWidget( + tester: tester, + testScreenSize: testScreenSize, + overrides: [hivePackageProvider.overrideWithValue(getMockRequestHive().mockHive)], + ), ); + await tester.pumpAndSettle(); - // click request token button + await tester.ensureVisible(find.byKey(TransactionTableScreen.requestTokensKey)); - await tester.pumpAndSettle(); - await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); - await tester.pumpAndSettle(); - // check that the drawer is displayed - expect(find.byKey(GetTestTokens.getTestTokensKey), findsOneWidget); - // click the request token button - var requestTokenButton = find.byKey(GetTestTokens.requestTokenButtonKey); - await tester.ensureVisible(requestTokenButton); + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); + }); + + await tester.pump(); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + + await tester.pump(); + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + await tester.pumpAndSettle(); - await tester.tap(requestTokenButton); + await tester.pump(); + + await customRunAsync(tester, test: () async { + expect((find.byKey(SuccessDialog.requestSuccessDialogKey)), findsOneWidget); + }); await tester.pumpAndSettle(); - await tester.ensureVisible(find.byKey(SuccessDialog.requestSuccessDialogKey)); - // first time success message - expect(find.byKey(SuccessDialog.requestSuccessDialogKey), findsOneWidget); - // find close button + await tester.tap(find.byKey(SuccessDialog.closeSuccessDialogKey)); await tester.pumpAndSettle(); + + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + await tester.pump(); + + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + await tester.pumpAndSettle(); - await tester.tap(requestTokenButton); - await tester.pumpAndSettle(const Duration(seconds: 1)); - expect(find.byKey(ErrorDialog.requestErrorDialogKey), findsOneWidget); - }, - ); + await tester.pump(); + + await customRunAsync(tester, test: () async { + expect((find.byKey(ErrorDialog.requestErrorDialogKey)), findsOneWidget); + }); + }; + }); diff --git a/test/requests/tablet_request_success_test.dart b/test/requests/tablet_request_success_test.dart new file mode 100644 index 0000000..bcc7d69 --- /dev/null +++ b/test/requests/tablet_request_success_test.dart @@ -0,0 +1,64 @@ +import 'package:faucet/home/sections/get_test_tokens.dart'; +import 'package:faucet/requests/providers/requests_provider.dart'; +import 'package:faucet/shared/services/hive/hive_service.dart'; +import 'package:faucet/transactions/sections/transaction_table.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../essential_test_provider_widget.dart'; +import '../required_test_class.dart'; +import '../utils/tester_utils.dart'; +import 'utils/mock_request_hive_utils.dart'; + +class TabletRequestTokensTest extends RequiredTest { + Future Function(TestScreenSizes testScreenSize) requestTokenTestTablet; + + TabletRequestTokensTest({ + required this.requestTokenTestTablet, + required super.testScreenSize, + }); + + Future runTests() async { + await requestTokenTestTablet(testScreenSize); + } +} + +void main() async { + final requestTests = TabletRequestTokensTest( + requestTokenTestTablet: (testScreenSize) => requestTokenTestTablet(testScreenSize), + testScreenSize: TestScreenSizes.tablet, + ); + + await requestTests.runTests(); +} + +Future requestTokenTestTablet(TestScreenSizes testScreenSize) async => + testWidgets('Should confirm that tokens are requested ${testScreenSize.name}', (WidgetTester tester) async { + (WidgetTester tester) async { + await tester.pumpWidget( + await essentialTestProviderWidget( + tester: tester, + testScreenSize: testScreenSize, + overrides: [hivePackageProvider.overrideWithValue(getMockRequestHive().mockHive)], + ), + ); + await tester.pumpAndSettle(); + await tester.ensureVisible(find.byKey(TransactionTableScreen.requestTokensKey)); + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey)); + }); + await tester.pump(); + expect(find.byKey(GetTestTokens.getTestTokensKey), findsWidgets); + await tester.pump(); + await tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey)); + await tester.pump(); + await customRunAsync(tester, test: () async { + await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false); + }); + await tester.pumpAndSettle(); + await tester.pump(); + await customRunAsync(tester, test: () async { + expect((find.byKey(SuccessDialog.requestSuccessDialogKey)), findsWidgets); + }); + await tester.pumpAndSettle(); + }; + }); diff --git a/test/shared/widgets/mobile_footer_tests.dart b/test/shared/widgets/mobile_footer_tests.dart deleted file mode 100644 index 2c755f7..0000000 --- a/test/shared/widgets/mobile_footer_tests.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:faucet/shared/widgets/footer.dart'; -import 'package:faucet/transactions/sections/transaction_table.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../../essential_test_provider_widget.dart'; -import '../../required_test_class.dart'; -import '../../transactions/required_transactions_tests.dart'; - -void main() async { - final transactionTableTests = RequiredTransactionsTest( - transactionLoaded: (testScreenSize) => transactionLoaded(testScreenSize), testScreenSize: TestScreenSizes.mobile); - await transactionTableTests.runTests(); -} - -Future transactionLoaded(TestScreenSizes testScreenSize) async => - testWidgets('Mobile - Should display the footer once the page is loaded', (WidgetTester tester) async { - await tester.pumpWidget( - await essentialTestProviderWidget( - tester: tester, - testScreenSize: testScreenSize, - ), - ); - await tester.pumpAndSettle(); - - expect(find.byKey(Footer.footerKey), findsOneWidget); - }); diff --git a/test/shared/widgets/tablet_footer_tests.dart b/test/shared/widgets/tablet_footer_tests.dart deleted file mode 100644 index e0a9200..0000000 --- a/test/shared/widgets/tablet_footer_tests.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:faucet/shared/widgets/footer.dart'; -import 'package:faucet/transactions/sections/transaction_table.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../../essential_test_provider_widget.dart'; -import '../../required_test_class.dart'; -import '../../transactions/required_transactions_tests.dart'; - -void main() async { - final transactionTableTests = RequiredTransactionsTest( - transactionLoaded: (testScreenSize) => transactionLoaded(testScreenSize), testScreenSize: TestScreenSizes.tablet); - await transactionTableTests.runTests(); -} - -Future transactionLoaded(TestScreenSizes testScreenSize) async => - testWidgets('Tablet - Should display the footer once the page is loaded', (WidgetTester tester) async { - await tester.pumpWidget( - await essentialTestProviderWidget( - tester: tester, - testScreenSize: testScreenSize, - ), - ); - await tester.pumpAndSettle(); - - expect(find.byKey(Footer.footerKey), findsOneWidget); - }); diff --git a/test/transactions/desktop_transactions_test.dart b/test/transactions/desktop_transactions_test.dart deleted file mode 100644 index a6e77ee..0000000 --- a/test/transactions/desktop_transactions_test.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:faucet/transactions/sections/transaction_table.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../essential_test_provider_widget.dart'; -import '../required_test_class.dart'; -import 'required_transactions_tests.dart'; - -void main() async { - final transactionTableTests = RequiredTransactionsTest( - transactionLoaded: (testScreenSize) => transactionLoaded(testScreenSize), - testScreenSize: TestScreenSizes.desktop); - await transactionTableTests.runTests(); -} - -Future transactionLoaded(TestScreenSizes testScreenSize) async => - testWidgets('Desktop - Should show transaction table when transactions are loaded', (WidgetTester tester) async { - await tester.pumpWidget( - await essentialTestProviderWidget( - tester: tester, - testScreenSize: testScreenSize, - ), - ); - await tester.pumpAndSettle(); - - expect(find.byKey(TransactionTableScreen.transactionsTableKey), findsOneWidget); - }); diff --git a/test/transactions/mobile_transactions_test.dart b/test/transactions/mobile_transactions_test.dart deleted file mode 100644 index 919d356..0000000 --- a/test/transactions/mobile_transactions_test.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:faucet/transactions/sections/transaction_table.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../essential_test_provider_widget.dart'; -import '../required_test_class.dart'; -import 'required_transactions_tests.dart'; - -void main() async { - final transactionTableTests = RequiredTransactionsTest( - transactionLoaded: (testScreenSize) => transactionLoaded(testScreenSize), testScreenSize: TestScreenSizes.mobile); - await transactionTableTests.runTests(); -} - -Future transactionLoaded(TestScreenSizes testScreenSize) async => - testWidgets('Mobile - Should show transaction table when transactions are loaded', (WidgetTester tester) async { - await tester.pumpWidget( - await essentialTestProviderWidget( - tester: tester, - testScreenSize: testScreenSize, - ), - ); - await tester.pumpAndSettle(); - - expect(find.byKey(TransactionTableScreen.transactionsTableKey), findsOneWidget); - }); diff --git a/test/transactions/required_transactions_tests.dart b/test/transactions/required_transactions_tests.dart deleted file mode 100644 index 6cb3aa6..0000000 --- a/test/transactions/required_transactions_tests.dart +++ /dev/null @@ -1,14 +0,0 @@ -import '../required_test_class.dart'; - -class RequiredTransactionsTest extends RequiredTest { - Future Function(TestScreenSizes testScreenSize) transactionLoaded; - - RequiredTransactionsTest({ - required this.transactionLoaded, - required super.testScreenSize, - }); - - Future runTests() async { - await transactionLoaded(testScreenSize); - } -} diff --git a/test/transactions/tablet_transactions_test.dart b/test/transactions/tablet_transactions_test.dart deleted file mode 100644 index dc68519..0000000 --- a/test/transactions/tablet_transactions_test.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:faucet/transactions/sections/transaction_table.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import '../essential_test_provider_widget.dart'; -import '../required_test_class.dart'; -import 'required_transactions_tests.dart'; - -void main() async { - final transactionTableTests = RequiredTransactionsTest( - transactionLoaded: (testScreenSize) => transactionLoaded(testScreenSize), testScreenSize: TestScreenSizes.tablet); - await transactionTableTests.runTests(); -} - -Future transactionLoaded(TestScreenSizes testScreenSize) async => - testWidgets('Tablet - Should show transaction table when transactions are loaded', (WidgetTester tester) async { - await tester.pumpWidget( - await essentialTestProviderWidget( - tester: tester, - testScreenSize: testScreenSize, - ), - ); - await tester.pumpAndSettle(); - - expect(find.byKey(TransactionTableScreen.transactionsTableKey), findsOneWidget); - }); diff --git a/test/utils/tester_utils.dart b/test/utils/tester_utils.dart index 9d14981..03d8782 100644 --- a/test/utils/tester_utils.dart +++ b/test/utils/tester_utils.dart @@ -42,8 +42,8 @@ Future customRunAsync( // Timers Pending fix Future pendingTimersFix(WidgetTester tester) async { await customRunAsync(tester, test: () async { - await Future.delayed(Duration(milliseconds: 500)); + await Future.delayed(const Duration(milliseconds: 500)); await pumpTester(tester, duration: 10, loops: 100); - await Future.delayed(Duration(milliseconds: 500)); + await Future.delayed(const Duration(milliseconds: 500)); }); }