From 7ba127f8f890fc777d4ef2310681b3d62bc91bda Mon Sep 17 00:00:00 2001 From: Gabriel Terwesten Date: Mon, 24 Apr 2023 10:52:47 +0200 Subject: [PATCH] test(package_info_plus): run integration tests (#1687) --- .github/workflows/package_info_plus.yaml | 13 ++++++++++++ .github/workflows/scripts/integration-test.sh | 14 +++++++++++++ .../example/integration_test/driver.dart | 3 +++ .../package_info_plus_test.dart | 6 +++--- .../package_info_plus_web_test.dart} | 21 ++++++++++++------- .../package_info_plus_web_test.mocks.dart | 0 .../package_info_plus/example/pubspec.yaml | 3 +++ .../package_info_plus/pubspec.yaml | 2 -- 8 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 packages/package_info_plus/package_info_plus/example/integration_test/driver.dart rename packages/package_info_plus/package_info_plus/{test/package_info_plus_web_test_disabled.dart => example/integration_test/package_info_plus_web_test.dart} (90%) rename packages/package_info_plus/package_info_plus/{test => example/integration_test}/package_info_plus_web_test.mocks.dart (100%) diff --git a/.github/workflows/package_info_plus.yaml b/.github/workflows/package_info_plus.yaml index 93a3ccd1ad..bd4dfee2a1 100644 --- a/.github/workflows/package_info_plus.yaml +++ b/.github/workflows/package_info_plus.yaml @@ -199,3 +199,16 @@ jobs: run: ./.github/workflows/scripts/install-tools.sh - name: "Build Example" run: ./.github/workflows/scripts/build-examples.sh web ./lib/main.dart + + web_integration_test: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: "Checkout repository" + uses: actions/checkout@v3 + - name: "Install Flutter" + run: ./.github/workflows/scripts/install-flutter.sh stable + - name: "Install Tools" + run: ./.github/workflows/scripts/install-tools.sh + - name: "Run Integration Test" + run: ./.github/workflows/scripts/integration-test.sh web package_info_plus_example diff --git a/.github/workflows/scripts/integration-test.sh b/.github/workflows/scripts/integration-test.sh index bd32eb39c7..9abecde100 100755 --- a/.github/workflows/scripts/integration-test.sh +++ b/.github/workflows/scripts/integration-test.sh @@ -39,3 +39,17 @@ then melos exec -c 1 --scope="$SCOPE" --dir-exists="./integration_test" -- \ "flutter test ./integration_test/MELOS_PARENT_PACKAGE_NAME_test.dart --dart-define=CI=true" fi + +if [ "$ACTION" == "web" ] +then + # Start x virtual framebuffer for chrome to run. + export DISPLAY=:99 + Xvfb $DISPLAY -screen 0 1024x768x16 & + sleep 5 # Give xvfb some time to start. + + # Start chrome driver. + chromedriver --port=4444 & + + melos exec -c 1 --scope="$SCOPE" --dir-exists="./integration_test" -- \ + "flutter drive -d chrome --driver ./integration_test/driver.dart --target ./integration_test/MELOS_PARENT_PACKAGE_NAME_web_test.dart --dart-define=CI=true" +fi diff --git a/packages/package_info_plus/package_info_plus/example/integration_test/driver.dart b/packages/package_info_plus/package_info_plus/example/integration_test/driver.dart new file mode 100644 index 0000000000..b38629cca9 --- /dev/null +++ b/packages/package_info_plus/package_info_plus/example/integration_test/driver.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_test.dart b/packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_test.dart index 4510344f83..bb86c04b1d 100644 --- a/packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_test.dart +++ b/packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_test.dart @@ -17,10 +17,10 @@ void main() { final info = await PackageInfo.fromPlatform(); // These tests are based on the example app. The tests should be updated if any related info changes. if (kIsWeb) { - expect(info.appName, 'package_info_example'); + expect(info.appName, 'package_info_plus_example'); expect(info.buildNumber, '4'); expect(info.buildSignature, isEmpty); - expect(info.packageName, 'package_info_example'); + expect(info.packageName, 'package_info_plus_example'); expect(info.version, '1.2.3'); expect(info.installerStore, null); } else { @@ -68,7 +68,7 @@ void main() { await tester.pumpWidget(const MyApp()); await tester.pumpAndSettle(); if (kIsWeb) { - expect(find.text('package_info_example'), findsNWidgets(2)); + expect(find.text('package_info_plus_example'), findsNWidgets(2)); expect(find.text('1.2.3'), findsOneWidget); expect(find.text('4'), findsOneWidget); expect(find.text('Not set'), findsOneWidget); diff --git a/packages/package_info_plus/package_info_plus/test/package_info_plus_web_test_disabled.dart b/packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_web_test.dart similarity index 90% rename from packages/package_info_plus/package_info_plus/test/package_info_plus_web_test_disabled.dart rename to packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_web_test.dart index b50071e556..fdf2b44358 100644 --- a/packages/package_info_plus/package_info_plus/test/package_info_plus_web_test_disabled.dart +++ b/packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_web_test.dart @@ -2,14 +2,20 @@ import 'dart:convert'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart' as http; +import 'package:integration_test/integration_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:package_info_plus/src/package_info_plus_web.dart'; +import 'package_info_plus_test.dart' as common_tests; import 'package_info_plus_web_test.mocks.dart'; @GenerateMocks([http.Client]) void main() { + common_tests.main(); + + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + // ignore: constant_identifier_names const VERSION_JSON = { 'app_name': 'package_info_example', @@ -31,9 +37,9 @@ void main() { group( 'Package Info Web', () { - test( + testWidgets( 'Get correct values when response status is 200', - () async { + (tester) async { when(client.get(any)).thenAnswer( (_) => Future.value( http.Response(jsonEncode(VERSION_JSON), 200), @@ -50,9 +56,9 @@ void main() { }, ); - test( + testWidgets( 'Get empty values when response status is not 200', - () async { + (tester) async { when(client.get(any)).thenAnswer( (_) => Future.value( http.Response('', 404), @@ -69,9 +75,9 @@ void main() { }, ); - test( + testWidgets( 'Get correct versionJsonUrl for http and https', - () { + (tester) async { expect( plugin.versionJsonUrl('https://example.com/#/my-page', 1), Uri.parse('https://example.com/version.json?cachebuster=1'), @@ -102,7 +108,8 @@ void main() { }, ); - test('Get correct versionJsonUrl for chrome-extension', () { + testWidgets('Get correct versionJsonUrl for chrome-extension', + (tester) async { expect( plugin.versionJsonUrl('chrome-extension://abcdefgh', 1), Uri.parse('chrome-extension://abcdefgh/version.json?cachebuster=1'), diff --git a/packages/package_info_plus/package_info_plus/test/package_info_plus_web_test.mocks.dart b/packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_web_test.mocks.dart similarity index 100% rename from packages/package_info_plus/package_info_plus/test/package_info_plus_web_test.mocks.dart rename to packages/package_info_plus/package_info_plus/example/integration_test/package_info_plus_web_test.mocks.dart diff --git a/packages/package_info_plus/package_info_plus/example/pubspec.yaml b/packages/package_info_plus/package_info_plus/example/pubspec.yaml index 0b8fd646cd..086f6fd94f 100644 --- a/packages/package_info_plus/package_info_plus/example/pubspec.yaml +++ b/packages/package_info_plus/package_info_plus/example/pubspec.yaml @@ -9,9 +9,11 @@ environment: dependencies: flutter: sdk: flutter + http: ^0.13.5 package_info_plus: ^3.1.0 dev_dependencies: + build_runner: ^2.0.3 integration_test: sdk: flutter flutter_driver: @@ -19,6 +21,7 @@ dev_dependencies: flutter_lints: ^2.0.1 flutter_test: sdk: flutter + mockito: ^5.0.7 flutter: uses-material-design: true diff --git a/packages/package_info_plus/package_info_plus/pubspec.yaml b/packages/package_info_plus/package_info_plus/pubspec.yaml index 8a9d269178..fd8f7589a4 100644 --- a/packages/package_info_plus/package_info_plus/pubspec.yaml +++ b/packages/package_info_plus/package_info_plus/pubspec.yaml @@ -36,11 +36,9 @@ dependencies: win32: ">=2.7.0 <5.0.0" dev_dependencies: - build_runner: ^2.0.3 flutter_lints: ^2.0.1 flutter_test: sdk: flutter - mockito: ^5.0.7 test: ^1.21.1 environment: