Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ class FirebaseDataConnect extends FirebasePluginPlatform {
FirebaseDataConnect(
{required this.app,
required this.connectorConfig,
@Deprecated(
'Passing an explicit instance is deprecated, internal handling is now automatic.')
this.auth,
@Deprecated(
'Passing an explicit instance is deprecated, internal handling is now automatic.')
this.appCheck,
CallerSDKType? sdkType,
this.cacheSettings})
Expand Down Expand Up @@ -94,6 +98,9 @@ class FirebaseDataConnect extends FirebasePluginPlatform {
}
transportOptions ??=
TransportOptions('firebasedataconnect.googleapis.com', null, true);
auth ??= app.getService<FirebaseAuth>();
appCheck ??= app.getService<FirebaseAppCheck>();

final rest = RestTransport(
transportOptions!,
options,
Expand Down Expand Up @@ -198,7 +205,11 @@ class FirebaseDataConnect extends FirebasePluginPlatform {
/// If pass in [appCheck], request session will get protected from abusing.
static FirebaseDataConnect instanceFor(
{FirebaseApp? app,
@Deprecated(
'Passing an explicit instance is deprecated, internal handling is now automatic.')
FirebaseAuth? auth,
@Deprecated(
'Passing an explicit instance is deprecated, internal handling is now automatic.')
FirebaseAppCheck? appCheck,
CallerSDKType? sdkType,
required ConnectorConfig connectorConfig,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,16 @@ class MockFirebaseApp extends _i1.Mock implements _i3.FirebaseApp {
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
) as _i5.Future<void>);

@override
void registerService<T extends _i3.FirebaseService>(T? service) =>
super.noSuchMethod(
Invocation.method(
#registerService,
[service],
),
returnValueForMissingStub: null,
);
}

/// A class which mocks [ConnectorConfig].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,35 @@ class MockFirebaseAuth extends Mock implements FirebaseAuth {

class MockFirebaseAppCheck extends Mock implements FirebaseAppCheck {}

class DynamicMockFirebaseApp extends Mock implements FirebaseApp {
DynamicMockFirebaseApp({
required this.name,
required this.options,
this.mockAuth,
this.mockAppCheck,
});

@override
final String name;

@override
final FirebaseOptions options;

final FirebaseAuth? mockAuth;
final FirebaseAppCheck? mockAppCheck;

@override
T? getService<T extends FirebaseService>() {
if (T == FirebaseAppCheck) {
return mockAppCheck as T?;
}
if (T == FirebaseAuth) {
return mockAuth as T?;
}
return null;
}
}

class MockTransportOptions extends Mock implements TransportOptions {}

class MockDataConnectTransport extends Mock implements DataConnectTransport {}
Expand Down Expand Up @@ -195,5 +224,35 @@ void main() {
equals(instance),
);
});

test(
'checkTransport resolves dynamic service instances from registry just-in-time',
() {
FirebaseDataConnect.cachedInstances.clear();

final dynamicApp = DynamicMockFirebaseApp(
name: 'transportAppName',
options: const FirebaseOptions(
apiKey: 'fake_api_key',
appId: 'fake_app_id',
messagingSenderId: 'fake_messaging_sender_id',
projectId: 'fake_project_id',
),
mockAuth: mockAuth,
mockAppCheck: mockAppCheck,
);

final instance = FirebaseDataConnect(
app: dynamicApp,
connectorConfig: mockConnectorConfig,
);

instance.checkTransport();

final dynamic routingTransport = instance.transport;
expect(routingTransport.rest.appCheck, equals(mockAppCheck));
expect(routingTransport.websocket.auth, equals(mockAuth));
expect(routingTransport.websocket.appCheck, equals(mockAppCheck));
});
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,16 @@ class MockFirebaseApp extends _i1.Mock implements _i3.FirebaseApp {
returnValue: _i5.Future<void>.value(),
returnValueForMissingStub: _i5.Future<void>.value(),
) as _i5.Future<void>);

@override
void registerService<T extends _i3.FirebaseService>(T? service) =>
super.noSuchMethod(
Invocation.method(
#registerService,
[service],
),
returnValueForMissingStub: null,
);
}

/// A class which mocks [ConnectorConfig].
Expand Down
Loading