Merge branch 'g-login' into experiment
This commit is contained in:
commit
e357a0892e
3 changed files with 103 additions and 28 deletions
|
|
@ -2,6 +2,7 @@ import 'dart:async';
|
|||
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
import 'package:google_sign_in/google_sign_in.dart';
|
||||
import 'package:rxdart/rxdart.dart';
|
||||
|
||||
class GoogleSignInProvider {
|
||||
final GoogleSignIn _googleSignIn;
|
||||
|
|
@ -11,18 +12,33 @@ class GoogleSignInProvider {
|
|||
: _googleSignIn = googleSignIn ?? GoogleSignIn(),
|
||||
_auth = firebaseAuth ?? FirebaseAuth.instance;
|
||||
|
||||
Observable<FirebaseUser> get onAuthStateChange =>
|
||||
Observable(_auth.onAuthStateChanged);
|
||||
|
||||
Future<FirebaseUser> signIn() async {
|
||||
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
|
||||
final GoogleSignInAuthentication googleAuth =
|
||||
await googleUser.authentication;
|
||||
try {
|
||||
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
|
||||
final GoogleSignInAuthentication googleAuth =
|
||||
await googleUser.authentication;
|
||||
|
||||
final AuthCredential credential = GoogleAuthProvider.getCredential(
|
||||
accessToken: googleAuth.accessToken,
|
||||
idToken: googleAuth.idToken,
|
||||
);
|
||||
final AuthCredential credential = GoogleAuthProvider.getCredential(
|
||||
accessToken: googleAuth.accessToken,
|
||||
idToken: googleAuth.idToken,
|
||||
);
|
||||
|
||||
final FirebaseUser user = await _auth.signInWithCredential(credential);
|
||||
print("signed in " + user.displayName);
|
||||
return user;
|
||||
final FirebaseUser user = await _auth.signInWithCredential(credential);
|
||||
return user;
|
||||
} catch (e) {
|
||||
print('Error signing in with Google: $e');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<FirebaseUser> getCurrentUser() async {
|
||||
return await _auth.currentUser();
|
||||
}
|
||||
|
||||
Future<void> signOut() async {
|
||||
await _auth.signOut();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,24 +9,6 @@ import 'package:do_more/src/resources/firestore_provider.dart';
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
|
||||
class MockFirestore extends Mock implements Firestore {}
|
||||
|
||||
class MockCollectionReference extends Mock implements CollectionReference {}
|
||||
|
||||
class MockDocumentReference extends Mock implements DocumentReference {}
|
||||
|
||||
class MockDocumentSnapshot extends Mock implements DocumentSnapshot {
|
||||
final Map<String, dynamic> data;
|
||||
|
||||
MockDocumentSnapshot([this.data]);
|
||||
|
||||
dynamic operator [](String key) => data[key];
|
||||
}
|
||||
|
||||
class MockQuerySnapshot extends Mock implements QuerySnapshot {}
|
||||
|
||||
class MockQuery extends Mock implements Query {}
|
||||
|
||||
main() {
|
||||
final task = TaskModel(
|
||||
id: '1',
|
||||
|
|
@ -253,3 +235,21 @@ main() {
|
|||
});
|
||||
});
|
||||
}
|
||||
|
||||
class MockFirestore extends Mock implements Firestore {}
|
||||
|
||||
class MockCollectionReference extends Mock implements CollectionReference {}
|
||||
|
||||
class MockDocumentReference extends Mock implements DocumentReference {}
|
||||
|
||||
class MockDocumentSnapshot extends Mock implements DocumentSnapshot {
|
||||
final Map<String, dynamic> data;
|
||||
|
||||
MockDocumentSnapshot([this.data]);
|
||||
|
||||
dynamic operator [](String key) => data[key];
|
||||
}
|
||||
|
||||
class MockQuerySnapshot extends Mock implements QuerySnapshot {}
|
||||
|
||||
class MockQuery extends Mock implements Query {}
|
||||
|
|
|
|||
59
test/src/resources/google_sign_in_provider_test.dart
Normal file
59
test/src/resources/google_sign_in_provider_test.dart
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:do_more/src/resources/google_sign_in_provider.dart';
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:google_sign_in/google_sign_in.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
|
||||
main() {
|
||||
group('GoogleSignInProvider', () {
|
||||
test('should return an instance of user', () {
|
||||
final googleSignIn = MockGoogleSignIn();
|
||||
final auth = MockFirebaseAuth();
|
||||
final googleUser = MockGoogleSignInAccount();
|
||||
final googleAuth = MockGoogleSignInAuthentication();
|
||||
final user = MockFirebaseUser();
|
||||
final provider = GoogleSignInProvider(googleSignIn, auth);
|
||||
|
||||
when(googleSignIn.signIn()).thenAnswer((_) => Future.value(googleUser));
|
||||
when(googleUser.authentication)
|
||||
.thenAnswer((_) => Future.value(googleAuth));
|
||||
when(auth.signInWithCredential(any))
|
||||
.thenAnswer((_) => Future.value(user));
|
||||
|
||||
expect(provider.signIn(), completion(isInstanceOf<FirebaseUser>()));
|
||||
});
|
||||
|
||||
test('should get the current user stored in cache', () {
|
||||
final auth = MockFirebaseAuth();
|
||||
final user = MockFirebaseUser();
|
||||
final provider = GoogleSignInProvider(null, auth);
|
||||
|
||||
when(auth.currentUser()).thenAnswer((_) => Future.value(user));
|
||||
|
||||
expect(
|
||||
provider.getCurrentUser(), completion(isInstanceOf<FirebaseUser>()));
|
||||
});
|
||||
|
||||
test('should sign out a user', () {
|
||||
final auth = MockFirebaseAuth();
|
||||
final provider = GoogleSignInProvider(null, auth);
|
||||
|
||||
when(auth.signOut()).thenAnswer((_) => Future.value());
|
||||
|
||||
expect(provider.signOut(), completes);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
class MockGoogleSignIn extends Mock implements GoogleSignIn {}
|
||||
|
||||
class MockFirebaseAuth extends Mock implements FirebaseAuth {}
|
||||
|
||||
class MockGoogleSignInAccount extends Mock implements GoogleSignInAccount {}
|
||||
|
||||
class MockGoogleSignInAuthentication extends Mock
|
||||
implements GoogleSignInAuthentication {}
|
||||
|
||||
class MockFirebaseUser extends Mock implements FirebaseUser {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue