From 19a54edc5921e567cfc22f1f55240c2f0b5fa56c Mon Sep 17 00:00:00 2001 From: Andrei Lesnitsky Date: Mon, 31 Oct 2022 11:06:21 +0100 Subject: [PATCH] fix(ui_oauth_apple): set default scope to 'email' and add a way to provide custom scopes (#9784) --- .../firebase_ui_auth/example/macos/Podfile | 2 +- .../test_driver/apple_sign_in_test.dart | 24 +++++++++++++++---- .../test_driver/firebase_ui_auth_e2e.dart | 5 +++- .../lib/src/provider.dart | 12 ++++++++++ 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/packages/firebase_ui_auth/example/macos/Podfile b/packages/firebase_ui_auth/example/macos/Podfile index 22d9caad2e9d..fe733905db65 100644 --- a/packages/firebase_ui_auth/example/macos/Podfile +++ b/packages/firebase_ui_auth/example/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.12' +platform :osx, '10.13' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/packages/firebase_ui_auth/example/test_driver/apple_sign_in_test.dart b/packages/firebase_ui_auth/example/test_driver/apple_sign_in_test.dart index 0b9ec75cabf5..5c52c8005985 100644 --- a/packages/firebase_ui_auth/example/test_driver/apple_sign_in_test.dart +++ b/packages/firebase_ui_auth/example/test_driver/apple_sign_in_test.dart @@ -109,6 +109,18 @@ void main() async { }, skip: !provider.supportsPlatform(defaultTargetPlatform), ); + + group('AppleProvider', () { + test('has default scopes', () { + final provider = AppleProvider(); + expect(provider.firebaseAuthProvider.scopes, ['email']); + }); + + test('provides a way to pass custom scopes', () { + final provider = AppleProvider(scopes: {'email', 'name'}); + expect(provider.firebaseAuthProvider.scopes, ['email', 'name']); + }); + }); } class MockListener extends Mock { @@ -144,14 +156,16 @@ class MockApp extends Mock implements FirebaseApp {} class MockAuth extends Mock implements FirebaseAuth { @override - Future signInWithAuthProvider(Object provider) async { + Future signInWithProvider(Object provider) async { return super.noSuchMethod( Invocation.method(#signInWithAuthProvider, [provider]), - returnValue: Future.delayed(const Duration(milliseconds: 50)) - .then((_) => MockCredential()), + returnValue: Future.delayed(const Duration(milliseconds: 10)).then( + (_) => MockCredential(), + ), returnValueForMissingStub: - Future.delayed(const Duration(milliseconds: 50)) - .then((_) => MockCredential()), + Future.delayed(const Duration(milliseconds: 10)).then( + (_) => MockCredential(), + ), ); } } diff --git a/packages/firebase_ui_auth/example/test_driver/firebase_ui_auth_e2e.dart b/packages/firebase_ui_auth/example/test_driver/firebase_ui_auth_e2e.dart index 88df9fe3a849..d91203bcf775 100644 --- a/packages/firebase_ui_auth/example/test_driver/firebase_ui_auth_e2e.dart +++ b/packages/firebase_ui_auth/example/test_driver/firebase_ui_auth_e2e.dart @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; @@ -36,8 +37,10 @@ Future main() async { phone_verification.main(); google_sign_in.main(); twitter_sign_in.main(); - apple_sign_in.main(); facebook_sign_in.main(); + apple_sign_in.main(); + } else if (defaultTargetPlatform == TargetPlatform.macOS) { + apple_sign_in.main(); } layout.main(); diff --git a/packages/firebase_ui_oauth_apple/lib/src/provider.dart b/packages/firebase_ui_oauth_apple/lib/src/provider.dart index 14aa175b11c8..4a586eb245f8 100644 --- a/packages/firebase_ui_oauth_apple/lib/src/provider.dart +++ b/packages/firebase_ui_oauth_apple/lib/src/provider.dart @@ -11,9 +11,21 @@ class AppleProvider extends OAuthProvider { @override final style = const AppleProviderButtonStyle(); + /// {@template ui.auth.oauth.apple_provider.scopes} + /// The scopes that will be passed down to the [fba.AppleAuthProvider]. + /// {@endtemplate} + final Set scopes; + @override fba.AppleAuthProvider firebaseAuthProvider = fba.AppleAuthProvider(); + AppleProvider({ + /// {@macro ui.auth.oauth.apple_provider.scopes} + this.scopes = const {'email'}, + }) { + scopes.forEach(firebaseAuthProvider.addScope); + } + @override void mobileSignIn(AuthAction action) { authListener.onBeforeSignIn();