Skip to content

Commit

Permalink
fix: tests and ci
Browse files Browse the repository at this point in the history
  • Loading branch information
pr-Mais committed Nov 16, 2021
1 parent 92dda96 commit 9eae21b
Show file tree
Hide file tree
Showing 12 changed files with 180 additions and 69 deletions.
Expand Up @@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
<string>9.0</string>
</dict>
</plist>
Expand Up @@ -25,7 +25,7 @@ dependency_overrides:
path: ../../../firebase_core/firebase_core_web

dev_dependencies:
e2e: ^0.7.0+1
drive: 0.1.0
flutter_driver:
sdk: flutter
flutter_test:
Expand Down
@@ -0,0 +1,34 @@
// @dart = 2.9

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_in_app_messaging/firebase_in_app_messaging.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:drive/drive.dart' as drive;

void main() => drive.main(testsMain);

void testsMain() {
group('$FirebaseInAppMessaging', () {
setUpAll(() async {
await Firebase.initializeApp();
});

test('triggerEvent', () async {
expect(
FirebaseInAppMessaging.instance.triggerEvent('someEvent'),
completes,
);
});

test('logging', () async {
expect(
FirebaseInAppMessaging.instance.setMessagesSuppressed(true),
completes,
);
expect(
FirebaseInAppMessaging.instance.setAutomaticDataCollectionEnabled(true),
completes,
);
});
});
}
@@ -0,0 +1,8 @@
// @dart = 2.9
// Copyright 2020, the Chromium project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:drive/drive_driver.dart' as drive;

void main() => drive.main();
Expand Up @@ -38,7 +38,8 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result
FIRInAppMessaging *fiam = [FIRInAppMessaging inAppMessaging];
fiam.messageDisplaySuppressed = [suppress boolValue];
result(nil);
} else if ([@"FirebaseInAppMessaging#setAutomaticDataCollectionEnabled" isEqualToString:call.method]) {
} else if ([@"FirebaseInAppMessaging#setAutomaticDataCollectionEnabled"
isEqualToString:call.method]) {
NSNumber *enabled = [NSNumber numberWithBool:call.arguments];
FIRInAppMessaging *fiam = [FIRInAppMessaging inAppMessaging];
fiam.automaticDataCollectionEnabled = [enabled boolValue];
Expand Down
Expand Up @@ -29,7 +29,7 @@ class FirebaseInAppMessaging extends FirebasePluginPlatform {

/// Returns an instance using the default [FirebaseApp].
static FirebaseInAppMessaging get instance {
return FirebaseInAppMessaging.instanceFor(
return FirebaseInAppMessaging._instanceFor(
app: Firebase.app(),
);
}
Expand Down
Expand Up @@ -10,18 +10,18 @@ environment:

dependencies:
firebase_core: ^1.10.0
firebase_core_platform_interface: ^4.1.0
firebase_in_app_messaging_platform_interface: ^0.1.0
flutter:
sdk: flutter
meta: ^1.3.0

dev_dependencies:
e2e: ^0.7.0+1
flutter_driver:
sdk: flutter
flutter_test:
sdk: flutter
mockito: ^5.0.16
pedantic: ^1.8.0
plugin_platform_interface: null
test: any

flutter:
Expand Down

This file was deleted.

Expand Up @@ -3,59 +3,152 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:plugin_platform_interface/plugin_platform_interface.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart';
import 'package:firebase_in_app_messaging/firebase_in_app_messaging.dart';
import 'package:firebase_in_app_messaging_platform_interface/firebase_in_app_messaging_platform_interface.dart';

import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';

typedef Callback = Function(MethodCall call);
MockFirebaseInAppMessaging mockFiam = MockFirebaseInAppMessaging();

void main() {
TestWidgetsFlutterBinding.ensureInitialized();
setupFirebaseIAMMocks();

late FirebaseInAppMessaging fiam;
FirebaseInAppMessagingPlatform.instance = mockFiam;
group('$FirebaseInAppMessaging', () {
final List<MethodCall> log = <MethodCall>[];

setUp(() {
log.clear();
FirebaseInAppMessaging.channel
.setMockMethodCallHandler((MethodCall methodcall) async {
log.add(methodcall);
return true;
});
setUpAll(() async {
await Firebase.initializeApp();

fiam = FirebaseInAppMessaging.instance;
when(mockFiam.delegateFor(
app: anyNamed('app'),
)).thenAnswer(
(_) => mockFiam,
);
when(mockFiam.triggerEvent('someEvent')).thenAnswer(
(_) => Future<void>.value(),
);
when(mockFiam.setMessagesSuppressed(any)).thenAnswer(
(_) => Future<void>.value(),
);
when(mockFiam.setAutomaticDataCollectionEnabled(any)).thenAnswer(
(_) => Future<void>.value(),
);
});

test('triggerEvent', () async {
final FirebaseInAppMessaging fiam = FirebaseInAppMessaging();
await fiam.triggerEvent('someEvent');
expect(log, <Matcher>[
isMethodCall('triggerEvent',
arguments: <String, String>{'eventName': 'someEvent'}),
]);
verify(mockFiam.triggerEvent('someEvent'));
});

test('setMessagesSuppressed', () async {
final FirebaseInAppMessaging fiam = FirebaseInAppMessaging();
await fiam.setMessagesSuppressed(true);
expect(log,
<Matcher>[isMethodCall('setMessagesSuppressed', arguments: true)]);
verify(mockFiam.setMessagesSuppressed(true));

log.clear();
await fiam.setMessagesSuppressed(false);
expect(log, <Matcher>[
isMethodCall('setMessagesSuppressed', arguments: false),
]);
verify(mockFiam.setMessagesSuppressed(false));
});

test('setDataCollectionEnabled', () async {
final FirebaseInAppMessaging fiam = FirebaseInAppMessaging();
await fiam.setAutomaticDataCollectionEnabled(true);
expect(log, <Matcher>[
isMethodCall('setAutomaticDataCollectionEnabled', arguments: true)
]);
verify(mockFiam.setAutomaticDataCollectionEnabled(true));

log.clear();
await fiam.setAutomaticDataCollectionEnabled(false);
expect(log, <Matcher>[
isMethodCall('setAutomaticDataCollectionEnabled', arguments: false),
]);
verify(mockFiam.setAutomaticDataCollectionEnabled(false));
});
});
}

void setupFirebaseIAMMocks([Callback? customHandlers]) {
TestWidgetsFlutterBinding.ensureInitialized();

MethodChannelFirebase.channel.setMockMethodCallHandler((call) async {
if (call.method == 'Firebase#initializeCore') {
return [
{
'name': defaultFirebaseAppName,
'options': {
'apiKey': '123',
'appId': '123',
'messagingSenderId': '123',
'projectId': '123',
},
'pluginConstants': {},
}
];
}

if (call.method == 'Firebase#initializeApp') {
return {
'name': call.arguments['appName'],
'options': call.arguments['options'],
'pluginConstants': {},
};
}

if (customHandlers != null) {
customHandlers(call);
}

return null;
});
}

class MockFirebaseInAppMessaging extends Mock
with
// ignore: prefer_mixin
MockPlatformInterfaceMixin
implements
TestFirebaseInAppMessagingPlatform {
@override
FirebaseInAppMessagingPlatform delegateFor({FirebaseApp? app}) {
return super.noSuchMethod(
Invocation.method(#delegateFor, [], {#app: app}),
returnValue: TestFirebaseInAppMessagingPlatform(app),
returnValueForMissingStub: TestFirebaseInAppMessagingPlatform(app),
);
}

@override
Future<void> setAutomaticDataCollectionEnabled(bool? enabled) {
return super.noSuchMethod(
Invocation.method(#setAutomaticDataCollectionEnabled, [enabled]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value(),
);
}

@override
Future<void> setMessagesSuppressed(bool? suppress) {
return super.noSuchMethod(
Invocation.method(#setMessagesSuppressed, [suppress]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value(),
);
}

@override
Future<void> triggerEvent(String? eventName) {
return super.noSuchMethod(
Invocation.method(#triggerEvent, [eventName]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value(),
);
}
}

class TestFirebaseInAppMessagingPlatform
extends FirebaseInAppMessagingPlatform {
TestFirebaseInAppMessagingPlatform(FirebaseApp? app) : super(app);

@override
FirebaseInAppMessagingPlatform delegateFor({FirebaseApp? app}) {
return this;
}
}
Expand Up @@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// ignore_for_file: require_trailing_commas

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/services.dart';

Expand Down
Expand Up @@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ignore_for_file: require_trailing_commas

import 'package:firebase_core/firebase_core.dart';
import 'package:meta/meta.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
Expand Down
Expand Up @@ -16,13 +16,6 @@ void main() {
setUpAll(() async {
FirebaseApp app = await Firebase.initializeApp();
platform = TestFirebaseInAppMessagingPlatform(app);

handleMethodCall((call) async {
switch (call.method) {
default:
return null;
}
});
});

test('Constructor', () {
Expand All @@ -31,22 +24,22 @@ void main() {

test('triggerEvent throws if not implemented', () async {
await expectLater(
platform!.triggerEvent('foo'),
() => platform!.triggerEvent('foo'),
throwsA(isA<UnimplementedError>()),
);
});

test('setMessagesSuppressed throws if not implemented', () async {
await expectLater(
platform!.setMessagesSuppressed(true),
() => platform!.setMessagesSuppressed(true),
throwsA(isA<UnimplementedError>()),
);
});

test('setAutomaticDataCollectionEnabled throws if not implemented',
() async {
await expectLater(
platform!.setAutomaticDataCollectionEnabled(true),
() => platform!.setAutomaticDataCollectionEnabled(true),
throwsA(isA<UnimplementedError>()),
);
});
Expand Down

0 comments on commit 9eae21b

Please sign in to comment.