Skip to content

Commit

Permalink
tests(DAPP-400): fixes broken tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Kelz29 committed Nov 15, 2023
1 parent 45f37e7 commit f4a830c
Show file tree
Hide file tree
Showing 15 changed files with 637 additions and 426 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,4 @@ web_build_and_host:

file_test:
@reset
@flutter test test/shared/widgets/mobile_footer_tests.dart
@flutter test test/
401 changes: 199 additions & 202 deletions lib/home/sections/get_test_tokens.dart

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -222,13 +221,15 @@ class WebViewXController extends ChangeNotifier implements i.WebViewXController<
/// Retrieves the inner page title
@override
Future<String?> getTitle() {
return Future.value(connector["document"]["title"].toString());
final Map<String, dynamic> connectorMap = connector as Map<String, dynamic>;
return Future.value(connectorMap["document"]["title"].toString());
}

/// Clears cache
@override
Future<void> clearCache() {
connector["localStorage"].callMethod("clear", []);
final Map<String, dynamic> connectorMap = connector as Map<String, dynamic>;
connectorMap["localStorage"].callMethod("clear", []);
evalRawJavascript(
'caches.keys().then((keyList) => Promise.all(keyList.map((key) => caches.delete(key))))',
);
Expand Down
71 changes: 7 additions & 64 deletions lib/shared/extended-libraries/webviewx/src/view/impl/web.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -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].
///
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -163,8 +161,7 @@ class _WebViewXState extends State<WebViewX> {

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();
Expand Down Expand Up @@ -218,58 +215,6 @@ class _WebViewXState extends State<WebViewX> {
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 = <String, dynamic>{};
for (var i = 0; i < formData.length; i++) {
if (i % 2 != 0) {
mappedFields[formData[i - 1]] = formData[i];
}
}
print(mappedFields);
}
})
]);
*/
};
}

Expand Down Expand Up @@ -362,8 +307,7 @@ class _WebViewXState extends State<WebViewX> {

final allow = widget.webSpecificParams.additionalAllowOptions;

if (widget.initialMediaPlaybackPolicy ==
AutoMediaPlaybackPolicy.alwaysAllow) {
if (widget.initialMediaPlaybackPolicy == AutoMediaPlaybackPolicy.alwaysAllow) {
allow.add('autoplay');
}

Expand Down Expand Up @@ -459,8 +403,7 @@ class _WebViewXState extends State<WebViewX> {
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;
}
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
66 changes: 42 additions & 24 deletions test/requests/desktop_request_failed_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ void main() async {
await requestTests.runTests();
}

Future<void> invalidTestTokenRequest(TestScreenSizes testScreenSize) async => testWidgets(
'Desktop - Should fail on invalid test token request',
(WidgetTester tester) async {
Future<void> invalidTestTokenRequest(TestScreenSizes testScreenSize) async =>
testWidgets('Should fail on invalid test token request', (WidgetTester tester) async {
await tester.runAsync(() async {
await tester.pumpWidget(
await essentialTestProviderWidget(tester: tester, testScreenSize: testScreenSize, overrides: [
hivePackageProvider.overrideWithValue(
Expand All @@ -29,29 +29,47 @@ Future<void> invalidTestTokenRequest(TestScreenSizes testScreenSize) async => te
]),
);
await tester.pumpAndSettle();
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);
Future.delayed(Duration.zero, () {
tester.tap(find.byKey(TransactionTableScreen.requestTokensKey));
});

await tester.ensureVisible(requestTokenButton);
await tester.pumpAndSettle();
await tester.tap(requestTokenButton);
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);
},
);
await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey));
Future.delayed(Duration.zero, () {
tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false);
});
Future.delayed(Duration.zero, () {
expect(find.byKey(GetTestTokens.getTestTokensKey), findsOneWidget);
});
Future.delayed(Duration.zero, () {
tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey));
});
Future.delayed(Duration.zero, () {
tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey));
});

Future.delayed(Duration.zero, () {
tester.ensureVisible(find.byKey(SuccessDialog.requestSuccessDialogKey));
});

Future.delayed(Duration.zero, () {
expect(find.byKey(SuccessDialog.requestSuccessDialogKey), findsOneWidget);
});
Future.delayed(Duration.zero, () {
tester.tap(find.bySemanticsLabel('Close'), warnIfMissed: false);
});
Future.delayed(Duration.zero, () {
tester.ensureVisible(find.byKey(GetTestTokens.requestTokenButtonKey));
});
Future.delayed(Duration.zero, () {
tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey));
});
Future.delayed(Duration.zero, () {
expect(find.byKey(ErrorDialog.requestErrorDialogKey), findsOneWidget);
});
});
});
64 changes: 64 additions & 0 deletions test/requests/desktop_request_success_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import 'package:faucet/home/sections/get_test_tokens.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/mock_request_hive_utils.dart';

class DesktopRequestSuccessTokensTest extends RequiredTest {
Future<void> Function(TestScreenSizes testScreenSize) requestTokenTest;

DesktopRequestSuccessTokensTest({
required this.requestTokenTest,
required super.testScreenSize,
});

Future<void> runTests() async {
await requestTokenTest(testScreenSize);
}
}

void main() async {
final requestTests = DesktopRequestSuccessTokensTest(
requestTokenTest: (testScreenSize) => requestTokenTest(testScreenSize),
testScreenSize: TestScreenSizes.desktop,
);

await requestTests.runTests();
}

Future<void> requestTokenTest(TestScreenSizes testScreenSize) async =>
testWidgets('Should confirm that tokens are requested ${testScreenSize.name}', (WidgetTester tester) async {
await tester.runAsync(() async {
await tester.pumpWidget(
await essentialTestProviderWidget(
tester: tester,
testScreenSize: testScreenSize,
overrides: [hivePackageProvider.overrideWithValue(getMockRequestHive().mockHive)],
),
);
await tester.pumpAndSettle();
await tester.pumpAndSettle();
Future.delayed(Duration.zero, () {
tester.ensureVisible(find.byKey(TransactionTableScreen.requestTokensKey));
});

await tester.pumpAndSettle();
await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey), warnIfMissed: false);

Future.delayed(Duration.zero, () {
tester.tap(find.byKey(TransactionTableScreen.requestTokensKey), warnIfMissed: false);
});
await tester.tap(find.byKey(TransactionTableScreen.requestTokensKey), warnIfMissed: false);

Future.delayed(Duration.zero, () {
expect(find.byKey(GetTestTokens.getTestTokensKey), findsOneWidget);
});

Future.delayed(Duration.zero, () async {
await tester.tap(find.byKey(GetTestTokens.requestTokenButtonKey), warnIfMissed: false);
});
});
});
Loading

0 comments on commit f4a830c

Please sign in to comment.