Merge branch 'g-login' into experiment

This commit is contained in:
Mariano Uvalle 2019-02-26 23:33:28 -06:00
commit e357a0892e
3 changed files with 103 additions and 28 deletions

View file

@ -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,7 +12,11 @@ class GoogleSignInProvider {
: _googleSignIn = googleSignIn ?? GoogleSignIn(),
_auth = firebaseAuth ?? FirebaseAuth.instance;
Observable<FirebaseUser> get onAuthStateChange =>
Observable(_auth.onAuthStateChanged);
Future<FirebaseUser> signIn() async {
try {
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
@ -22,7 +27,18 @@ class GoogleSignInProvider {
);
final FirebaseUser user = await _auth.signInWithCredential(credential);
print("signed in " + user.displayName);
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();
}
}

View file

@ -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 {}

View 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 {}