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));
});
}