Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/firebase_auth/lib/src/auth_result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ class AuthResult {
AuthResult._(this._data, FirebaseApp app)
: user = FirebaseUser._(_data['user'].cast<String, dynamic>(), app);

/// Constructs a authentication result from a user.
///
/// This is useful when apps are implementing [FirebaseUser] and managing their
/// own auth mechanism.
AuthResult.fromUser(this.user) : _data = null;

final Map<String, dynamic> _data;

/// Returns the currently signed-in [FirebaseUser], or `null` if there isn't
Expand Down
8 changes: 8 additions & 0 deletions packages/firebase_auth/lib/src/id_token_result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ class IdTokenResult {
@visibleForTesting
IdTokenResult(this._data, this._app);

/// Constructs a token result from a token.
///
/// This is useful when apps are implementing [FirebaseUser] and managing their
/// own tokens.
IdTokenResult.fromToken(String token)
: _data = <String, String>{'token': token},
_app = null;

final FirebaseApp _app;

final Map<dynamic, dynamic> _data;
Expand Down
114 changes: 114 additions & 0 deletions packages/firebase_auth/test/firebase_user_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_test/flutter_test.dart';

final String testDisplayName = 'testDisplayName';
final String testToken = 'testToken';

/// Implements an app specific [FirebaseUser] object.
///
/// This is useful for making sure APIs used within the object are "implements"
/// friendly with no private constructors.
class TestFirebaseUser implements FirebaseUser {
String _username = 'test';
String _password = 'pwd';
String _email;
String _displayName = testDisplayName;
String _token = testToken;
String _uid;

@override
Future<void> delete() async => null;

@override
String get displayName => _displayName;

@override
String get email => _email;

@override
Future<IdTokenResult> getIdToken({bool refresh = false}) async {
return IdTokenResult.fromToken(_token);
}

@override
bool get isAnonymous => (_username != null);

@override
bool get isEmailVerified => (_password != null);

@override
Future<AuthResult> linkWithCredential(AuthCredential credential) async {
return AuthResult.fromUser(this);
}

@override
FirebaseUserMetadata get metadata => null;

@override
String get phoneNumber => 'None';

@override
String get photoUrl => 'None';

@override
List<UserInfo> get providerData => <UserInfo>[];

@override
String get providerId => 'None';

@override
Future<AuthResult> reauthenticateWithCredential(
AuthCredential credential) async {
return AuthResult.fromUser(this);
}

@override
Future<void> reload() async => null;

@override
Future<void> sendEmailVerification() async => null;

@override
String get uid => _uid;

@override
Future<void> unlinkFromProvider(String provider) async => null;

@override
Future<void> updateEmail(String email) async {
_email = email;
return null;
}

@override
Future<void> updatePassword(String password) async {
_password = password;
return null;
}

@override
Future<void> updatePhoneNumberCredential(AuthCredential credential) async =>
null;

@override
Future<void> updateProfile(UserUpdateInfo userUpdateInfo) async {
_displayName = userUpdateInfo.displayName;
return null;
}
}

void main() {
test('Expect TestFirebaseUser can be constructed and used.', () async {
final FirebaseUser testUser = TestFirebaseUser();
expect(testUser.displayName, testDisplayName);
expect(testUser.isAnonymous, false);
expect((await testUser.getIdToken()).token, testToken);
expect((await testUser.linkWithCredential(null)).user, testUser);
});
}