From 9391c8225de2cd93606521ed312bb2ce0aa07ce7 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 11:04:07 -0700 Subject: [PATCH 01/10] Support for null additionalProviderInfo --- packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m index 83c18c8dd5fb..01e62b502f2a 100644 --- a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m +++ b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m @@ -374,12 +374,12 @@ - (void)sendResult:(FlutterResult)result [self sendResult:result forObject:@{ @"user" : (user != nil ? [self dictionaryFromUser:user] : nil), - @"additionalUserInfo" : @{ + @"additionalUserInfo" : additionalUserInfo ? @{ @"isNewUser" : [NSNumber numberWithBool:additionalUserInfo.isNewUser], @"username" : additionalUserInfo.username, @"providerId" : additionalUserInfo.providerID, @"profile" : additionalUserInfo.profile, - } + } : [NSNull null], } error:error]; } From bcc96334ff367804b1c1a464c88d5a0dc4f5781e Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 11:07:04 -0700 Subject: [PATCH 02/10] Bump changelog for release --- packages/firebase_auth/CHANGELOG.md | 4 ++++ packages/firebase_auth/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/firebase_auth/CHANGELOG.md b/packages/firebase_auth/CHANGELOG.md index 567fe3fe4d8c..aa71a18fad59 100644 --- a/packages/firebase_auth/CHANGELOG.md +++ b/packages/firebase_auth/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.12.0+1 + +* Fixes iOS sign-in exceptions when `additionalUserInfo` is `nil`. + ## 0.12.0 * Added new `AuthResult` and `AdditionalUserInfo` classes. diff --git a/packages/firebase_auth/pubspec.yaml b/packages/firebase_auth/pubspec.yaml index fa57e4707dbc..f3fd0520aff1 100755 --- a/packages/firebase_auth/pubspec.yaml +++ b/packages/firebase_auth/pubspec.yaml @@ -4,7 +4,7 @@ description: Flutter plugin for Firebase Auth, enabling Android and iOS like Google, Facebook and Twitter. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_auth -version: "0.12.0" +version: "0.12.0+1" flutter: plugin: From 2b29e47739a4c137f245af8559c9e9801db7e4b5 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 11:17:40 -0700 Subject: [PATCH 03/10] More aggressive null checking --- packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m index 01e62b502f2a..9d8417453f59 100644 --- a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m +++ b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m @@ -376,9 +376,9 @@ - (void)sendResult:(FlutterResult)result @"user" : (user != nil ? [self dictionaryFromUser:user] : nil), @"additionalUserInfo" : additionalUserInfo ? @{ @"isNewUser" : [NSNumber numberWithBool:additionalUserInfo.isNewUser], - @"username" : additionalUserInfo.username, - @"providerId" : additionalUserInfo.providerID, - @"profile" : additionalUserInfo.profile, + @"username" : additionalUserInfo.username ?: [NSNull null], + @"providerId" : additionalUserInfo.providerID ?: [NSNull null], + @"profile" : additionalUserInfo.profile ?: [NSNull null], } : [NSNull null], } error:error]; From 90c83d1c45f49f6ff0d52c7b0ff2ce79f1126b1a Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 11:28:58 -0700 Subject: [PATCH 04/10] Update CHANGELOG.md --- packages/firebase_auth/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/firebase_auth/CHANGELOG.md b/packages/firebase_auth/CHANGELOG.md index aa71a18fad59..6a3317e3c120 100644 --- a/packages/firebase_auth/CHANGELOG.md +++ b/packages/firebase_auth/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.12.0+1 -* Fixes iOS sign-in exceptions when `additionalUserInfo` is `nil`. +* Fixes iOS sign-in exceptions when `additionalUserInfo` is `nil` or has `nil` fields. ## 0.12.0 From eeafc7b1bcae6e121478f0c80aab37e61d4ce98c Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 11:35:07 -0700 Subject: [PATCH 05/10] reformat --- packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m index 9d8417453f59..5225d486d468 100644 --- a/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m +++ b/packages/firebase_auth/ios/Classes/FirebaseAuthPlugin.m @@ -379,7 +379,8 @@ - (void)sendResult:(FlutterResult)result @"username" : additionalUserInfo.username ?: [NSNull null], @"providerId" : additionalUserInfo.providerID ?: [NSNull null], @"profile" : additionalUserInfo.profile ?: [NSNull null], - } : [NSNull null], + } + : [NSNull null], } error:error]; } From 545e1404225d39d23e2ca66d4bdf10b941dcc40b Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 11:52:22 -0700 Subject: [PATCH 06/10] Update test results to reflect different behavior on iOS and Android --- .../firebase_auth/example/test/firebase_auth.dart | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/firebase_auth/example/test/firebase_auth.dart b/packages/firebase_auth/example/test/firebase_auth.dart index 5a76e4c05998..58eec27cc1b4 100644 --- a/packages/firebase_auth/example/test/firebase_auth.dart +++ b/packages/firebase_auth/example/test/firebase_auth.dart @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'dart:async'; +import 'dart:io'; import 'package:flutter_driver/driver_extension.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:firebase_auth/firebase_auth.dart'; @@ -21,10 +22,14 @@ void main() { expect(user.uid, isNotNull); expect(user.isAnonymous, isTrue); final AdditionalUserInfo additionalUserInfo = result.additionalUserInfo; - expect(additionalUserInfo.username, isNull); - expect(additionalUserInfo.isNewUser, isNotNull); - expect(additionalUserInfo.profile, isNull); - expect(additionalUserInfo.providerId, isNull); + if (Platform.isIOS) { + expect(additionalUserInfo, isNull); + } else if (Platform.isAndroid) { + expect(additionalUserInfo.username, isNull); + expect(additionalUserInfo.isNewUser, isNotNull); + expect(additionalUserInfo.profile, isNull); + expect(additionalUserInfo.providerId, isNull); + } }); test('isSignInWithEmailLink', () async { From 3f6c963dfd2c36734e46f0d6fb14a573e33b22e7 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 12:04:13 -0700 Subject: [PATCH 07/10] Sign out at the start of tests --- packages/firebase_auth/example/test/firebase_auth.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/firebase_auth/example/test/firebase_auth.dart b/packages/firebase_auth/example/test/firebase_auth.dart index 58eec27cc1b4..15770f8f5bf7 100644 --- a/packages/firebase_auth/example/test/firebase_auth.dart +++ b/packages/firebase_auth/example/test/firebase_auth.dart @@ -16,6 +16,10 @@ void main() { group('$FirebaseAuth', () { final FirebaseAuth auth = FirebaseAuth.instance; + setUp(() async { + await auth.signOut(); + }); + test('signInAnonymously', () async { final AuthResult result = await auth.signInAnonymously(); final FirebaseUser user = result.user; From 3e02604db8601dad19f193bcb33e5934ea638593 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 12:21:13 -0700 Subject: [PATCH 08/10] Fix test, filed issue --- packages/firebase_auth/example/test/firebase_auth.dart | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/firebase_auth/example/test/firebase_auth.dart b/packages/firebase_auth/example/test/firebase_auth.dart index 15770f8f5bf7..f0ec82778a04 100644 --- a/packages/firebase_auth/example/test/firebase_auth.dart +++ b/packages/firebase_auth/example/test/firebase_auth.dart @@ -26,12 +26,14 @@ void main() { expect(user.uid, isNotNull); expect(user.isAnonymous, isTrue); final AdditionalUserInfo additionalUserInfo = result.additionalUserInfo; + expect(additionalUserInfo.username, isNull); + expect(additionalUserInfo.isNewUser, isNotNull); + expect(additionalUserInfo.profile, isNull); if (Platform.isIOS) { - expect(additionalUserInfo, isNull); + // TODO(jackson): Fix behavior to be consistent across platforms + // https://github.com/firebase/firebase-ios-sdk/issues/3450 + expect(additionalUserInfo.providerId, 'password'); } else if (Platform.isAndroid) { - expect(additionalUserInfo.username, isNull); - expect(additionalUserInfo.isNewUser, isNotNull); - expect(additionalUserInfo.profile, isNull); expect(additionalUserInfo.providerId, isNull); } }); From e596e43ddfc2ac3cb68c0add7f8865a094a475c7 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 12:56:10 -0700 Subject: [PATCH 09/10] Make test continue passing once Firebase fix lands --- .../firebase_auth/example/test/firebase_auth.dart | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/firebase_auth/example/test/firebase_auth.dart b/packages/firebase_auth/example/test/firebase_auth.dart index f0ec82778a04..a2bd8e8dac22 100644 --- a/packages/firebase_auth/example/test/firebase_auth.dart +++ b/packages/firebase_auth/example/test/firebase_auth.dart @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. import 'dart:async'; -import 'dart:io'; import 'package:flutter_driver/driver_extension.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:firebase_auth/firebase_auth.dart'; @@ -29,13 +28,12 @@ void main() { expect(additionalUserInfo.username, isNull); expect(additionalUserInfo.isNewUser, isNotNull); expect(additionalUserInfo.profile, isNull); - if (Platform.isIOS) { - // TODO(jackson): Fix behavior to be consistent across platforms - // https://github.com/firebase/firebase-ios-sdk/issues/3450 - expect(additionalUserInfo.providerId, 'password'); - } else if (Platform.isAndroid) { - expect(additionalUserInfo.providerId, isNull); - } + // TODO(jackson): Fix behavior to be consistent across platforms + // https://github.com/firebase/firebase-ios-sdk/issues/3450 + expect( + additionalUserInfo.providerId == null || + additionalUserInfo.providerId == 'password', + isTrue); }); test('isSignInWithEmailLink', () async { From c705bfc43f35ef53beb46a4ee534cc13851e54eb Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Sun, 28 Jul 2019 12:57:44 -0700 Subject: [PATCH 10/10] Mention integration testing in CHANGELOG --- packages/firebase_auth/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/firebase_auth/CHANGELOG.md b/packages/firebase_auth/CHANGELOG.md index 6a3317e3c120..43ab971b889d 100644 --- a/packages/firebase_auth/CHANGELOG.md +++ b/packages/firebase_auth/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.12.0+1 * Fixes iOS sign-in exceptions when `additionalUserInfo` is `nil` or has `nil` fields. +* Additional integration testing. ## 0.12.0