diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index d661f8a8..295da244 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -19,11 +19,12 @@ jobs:
source-directory: ./intercom_flutter
steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-java@v1
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
with:
- java-version: '12.x'
- - uses: subosito/flutter-action@v1
+ distribution: 'temurin'
+ java-version: '17'
+ - uses: subosito/flutter-action@v2
with:
channel: 'stable'
@@ -54,11 +55,12 @@ jobs:
source-directory: ./intercom_flutter_platform_interface
steps:
- - uses: actions/checkout@v2
- - uses: actions/setup-java@v1
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
with:
- java-version: '12.x'
- - uses: subosito/flutter-action@v1
+ distribution: 'temurin'
+ java-version: '17'
+ - uses: subosito/flutter-action@v2
with:
channel: 'stable'
@@ -89,12 +91,12 @@ jobs:
source-directory: ./intercom_flutter_web/example
steps:
- - uses: actions/checkout@v2
- - uses: nanasess/setup-chromedriver@v2
- - uses: subosito/flutter-action@v1
+ - uses: actions/checkout@v4
+ - uses: nanasess/setup-chromedriver@v2
+ - uses: subosito/flutter-action@v2
with:
channel: 'stable'
-
+
# Download all Flutter packages
- name: Download dependencies
run: flutter pub get
@@ -110,13 +112,15 @@ jobs:
run: flutter analyze
working-directory: ${{env.source-directory}}
- # Run chrome driver
- - name: Run chrome driver
+ - name: Start chromedriver
run: chromedriver --port=4444 &
- working-directory: ${{env.source-directory}}
- # Run all integration tests
- name: Run integration tests
timeout-minutes: 10
- run: flutter drive -d web-server --browser-name=chrome --driver=test_driver/integration_test.dart --target=integration_test/intercom_flutter_web_test.dart
+ run: |
+ flutter drive \
+ -d web-server \
+ --browser-name=chrome \
+ --driver=test_driver/integration_test.dart \
+ --target=integration_test/intercom_flutter_web_test.dart
working-directory: ${{env.source-directory}}
diff --git a/intercom_flutter/example/.idea/runConfigurations/main_dart.xml b/intercom_flutter/example/.idea/runConfigurations/main_dart.xml
deleted file mode 100644
index aab7b5cd..00000000
--- a/intercom_flutter/example/.idea/runConfigurations/main_dart.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/intercom_flutter_web/example/integration_test/intercom_flutter_web_test.dart b/intercom_flutter_web/example/integration_test/intercom_flutter_web_test.dart
index 308d7586..7fb69aad 100755
--- a/intercom_flutter_web/example/integration_test/intercom_flutter_web_test.dart
+++ b/intercom_flutter_web/example/integration_test/intercom_flutter_web_test.dart
@@ -1,11 +1,44 @@
+import 'dart:js_interop';
+import 'dart:js_interop_unsafe';
+
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:intercom_flutter_web/intercom_flutter_web.dart';
+import 'package:web/web.dart' as web;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+ /// This replaces the script tag normally found in index.html
+ void injectIntercomMock() {
+ final eval = globalContext.getProperty('eval'.toJS) as JSFunction;
+ eval.callAsFunction(
+ globalContext,
+ '''
+ window.Intercom = function(command, args) {
+ console.log("JS: Intercom called with " + command + " " + JSON.stringify(args));
+ window._intercomCalls = window._intercomCalls || [];
+ window._intercomCalls.push({command: command, args: args});
+ };
+ '''
+ .toJS,
+ );
+
+ final settings = JSObject();
+ settings.setProperty('app_id'.toJS, 'mock'.toJS);
+ web.window.setProperty('intercomSettings'.toJS, settings);
+ }
+
group('IntercomFlutter', () {
+ setUpAll(() {
+ injectIntercomMock();
+ });
+
+ testWidgets('Intercom JS mock is installed', (_) async {
+ final intercom = web.window.getProperty('Intercom'.toJS);
+ expect(intercom, isNotNull);
+ });
+
late IntercomFlutterWeb plugin;
setUp(() {
@@ -115,8 +148,9 @@ void main() {
});
});
- testWidgets('testStream', (WidgetTester _) async {
- expect(plugin.getUnreadStream().first, completes);
+ testWidgets('testStream is accessible', (WidgetTester _) async {
+ final stream = plugin.getUnreadStream();
+ expect(stream, isA>());
});
testWidgets('displayArticle', (WidgetTester _) async {