diff --git a/packages/firebase_core/CHANGELOG.md b/packages/firebase_core/CHANGELOG.md index 40a68551a..0fbe63cda 100644 --- a/packages/firebase_core/CHANGELOG.md +++ b/packages/firebase_core/CHANGELOG.md @@ -1,5 +1,6 @@ ## NEXT +* Add integration tests based on upstream firebase_core v2.17.0. * Update minimum Flutter and Dart version to 3.13 and 3.1. * Fix new lint warnings. * Update code format. diff --git a/packages/firebase_core/example/integration_test/firebase_core_test.dart b/packages/firebase_core/example/integration_test/firebase_core_test.dart new file mode 100644 index 000000000..39bfa30df --- /dev/null +++ b/packages/firebase_core/example/integration_test/firebase_core_test.dart @@ -0,0 +1,86 @@ +// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Integration tests ported from upstream firebase_core v2.17.0: +// https://github.com/firebase/flutterfire/blob/firebase_core-v2.17.0/tests/integration_test/firebase_core/firebase_core_e2e_test.dart +// Originally authored by the Chromium project authors under a BSD-style +// license. + +import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart'; +import 'package:firebase_core_tizen_example/firebase_options.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + group('firebase_core', () { + const String testAppName = '[DEFAULT]'; + + setUpAll(() async { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + }); + + test('Firebase.apps', () async { + final List apps = Firebase.apps; + expect(apps.length, 1); + expect(apps[0].name, testAppName); + expect(apps[0].options, DefaultFirebaseOptions.currentPlatform); + }); + + test('Firebase.app()', () async { + final FirebaseApp app = Firebase.app(); + expect(app.name, testAppName); + expect(app.options, DefaultFirebaseOptions.currentPlatform); + }); + + test('Firebase.app() Exception', () async { + expect( + () => Firebase.app('NoApp'), + throwsA(noAppExists('NoApp')), + ); + }); + + test( + 'FirebaseApp.delete()', + () async { + await Firebase.initializeApp( + name: 'SecondaryApp', + options: DefaultFirebaseOptions.currentPlatform, + ); + + expect(Firebase.apps.length, 2); + + final FirebaseApp app = Firebase.app('SecondaryApp'); + + await app.delete(); + + expect(Firebase.apps.length, 1); + // TODO(russellwheatley): test randomly causes an auth sign-in failure due to duplicate accounts. + }, + skip: TargetPlatform.android == defaultTargetPlatform, + ); + + test('FirebaseApp.setAutomaticDataCollectionEnabled()', () async { + final FirebaseApp app = Firebase.app(); + await app.setAutomaticDataCollectionEnabled(false); + + expect(app.isAutomaticDataCollectionEnabled, false); + + await app.setAutomaticDataCollectionEnabled(true); + + expect(app.isAutomaticDataCollectionEnabled, true); + }); + + test('FirebaseApp.setAutomaticResourceManagementEnabled()', () async { + final FirebaseApp app = Firebase.app(); + + await app.setAutomaticResourceManagementEnabled(true); + }); + }); +} diff --git a/packages/firebase_core/example/lib/firebase_options.dart b/packages/firebase_core/example/lib/firebase_options.dart new file mode 100644 index 000000000..ee2edfe85 --- /dev/null +++ b/packages/firebase_core/example/lib/firebase_options.dart @@ -0,0 +1,31 @@ +// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members, no_default_cases, public_member_api_docs +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show TargetPlatform, defaultTargetPlatform, kIsWeb; + +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + throw UnsupportedError('Web is not supported.'); + } + switch (defaultTargetPlatform) { + case TargetPlatform.linux: // Tizen reports as TargetPlatform.linux + return linux; + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions linux = FirebaseOptions( + apiKey: 'AIzaSyAgUhHU8wSJgO5MVNy95tMT07NEjzMOfz0', + appId: '1:448618578101:ios:0b650370bb29e29cac3efc', + messagingSenderId: '448618578101', + projectId: 'react-native-firebase-testing', + ); +} diff --git a/packages/firebase_core/example/lib/main.dart b/packages/firebase_core/example/lib/main.dart index dfe3701a8..07f03b9a5 100644 --- a/packages/firebase_core/example/lib/main.dart +++ b/packages/firebase_core/example/lib/main.dart @@ -9,6 +9,8 @@ import 'dart:developer'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; +import 'firebase_options.dart'; + void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { @@ -16,12 +18,7 @@ class MyApp extends StatelessWidget { String get name => 'foo'; - FirebaseOptions get firebaseOptions => const FirebaseOptions( - appId: '1:448618578101:ios:0b650370bb29e29cac3efc', - apiKey: 'AIzaSyAgUhHU8wSJgO5MVNy95tMT07NEjzMOfz0', - projectId: 'react-native-firebase-testing', - messagingSenderId: '448618578101', - ); + FirebaseOptions get firebaseOptions => DefaultFirebaseOptions.currentPlatform; Future initializeDefault() async { final FirebaseApp app = await Firebase.initializeApp( diff --git a/packages/firebase_core/example/pubspec.yaml b/packages/firebase_core/example/pubspec.yaml index 442cd2278..9ee31a230 100644 --- a/packages/firebase_core/example/pubspec.yaml +++ b/packages/firebase_core/example/pubspec.yaml @@ -12,3 +12,14 @@ dependencies: path: ../ flutter: sdk: flutter + +dev_dependencies: + firebase_core_platform_interface: ^4.5.2 + flutter_driver: + sdk: flutter + flutter_test: + sdk: flutter + integration_test: + sdk: flutter + integration_test_tizen: + path: ../../integration_test/ diff --git a/packages/firebase_core/example/test_driver/integration_test.dart b/packages/firebase_core/example/test_driver/integration_test.dart new file mode 100644 index 000000000..4f10f2a52 --- /dev/null +++ b/packages/firebase_core/example/test_driver/integration_test.dart @@ -0,0 +1,7 @@ +// Copyright 2013 The Flutter 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 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/packages/firebase_core/pubspec.yaml b/packages/firebase_core/pubspec.yaml index 6b5ca7f30..9b261331f 100644 --- a/packages/firebase_core/pubspec.yaml +++ b/packages/firebase_core/pubspec.yaml @@ -22,3 +22,4 @@ flutter: false_secrets: - /example/lib/main.dart + - /example/lib/firebase_options.dart