ensureLiveFirebaseAuthForTest function
void
ensureLiveFirebaseAuthForTest()
Bridges Firebase Auth user token pigeon calls for code paths that still use
FirebaseAuth after LiveSignInWithCustomToken has established a session.
Implementation
void ensureLiveFirebaseAuthForTest() {
if (_firebaseAuthBridgeInstalled) return;
TestWidgetsFlutterBinding.ensureInitialized();
final messenger =
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger;
final codec = FirebaseAuthHostApi.pigeonChannelCodec;
void registerHandler(
String channelName,
Future<List<Object?>> Function(List<Object?> args) handler,
) {
messenger.setMockDecodedMessageHandler<Object?>(
BasicMessageChannel<Object?>(channelName, codec),
(Object? message) async {
final args = (message! as List<Object?>);
try {
return await handler(args);
} on PlatformException catch (error) {
return <Object?>[error.code, error.message, error.details];
} catch (error) {
return <Object?>['error', error.toString(), null];
}
},
);
}
registerHandler(
'dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerIdTokenListener',
(args) async {
final app = _decodeApp(args[0]);
final channel = 'ensemble_test_runner/auth/id-token/${app.appName}';
_mockEventChannel(channel);
return <Object?>[channel];
},
);
registerHandler(
'dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerAuthStateListener',
(args) async {
final app = _decodeApp(args[0]);
final channel = 'ensemble_test_runner/auth/auth-state/${app.appName}';
_mockEventChannel(channel);
return <Object?>[channel];
},
);
registerHandler(
'dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signOut',
(args) async {
final app = _decodeApp(args[0]);
_sessionsByApp.remove(app.appName);
return <Object?>[];
},
);
registerHandler(
'dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.getIdToken',
(args) async {
final app = _decodeApp(args[0]);
final session = _sessionForApp(app);
return <Object?>[
PigeonIdTokenResult(
token: session.idToken,
expirationTimestamp: session.expiresAtMs,
authTimestamp: DateTime.now().millisecondsSinceEpoch,
issuedAtTimestamp: DateTime.now().millisecondsSinceEpoch,
signInProvider: 'custom',
),
];
},
);
_firebaseAuthBridgeInstalled = true;
}