mudular code ready to fork

This commit is contained in:
gitea
2025-11-08 12:54:40 +01:00
parent 5f8d8330f5
commit 8c6bf598f5
21 changed files with 288 additions and 519 deletions
+1
View File
@@ -1,4 +1,5 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:app_boilerplate/core/exceptions/invalid_environment_exception.dart';
import 'package:app_boilerplate/config/config_loader.dart';
void main() {
+11 -10
View File
@@ -1,6 +1,7 @@
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:app_boilerplate/core/exceptions/firebase_exception.dart' show FirebaseServiceException;
import 'package:app_boilerplate/data/firebase/firebase_service.dart';
import 'package:app_boilerplate/data/firebase/models/firebase_config.dart';
import 'package:app_boilerplate/data/local/local_storage_service.dart';
@@ -81,7 +82,7 @@ void main() {
// but that's expected - Firebase requires actual project setup
expect(
() => service.initialize(),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
});
@@ -102,7 +103,7 @@ void main() {
email: '[email protected]',
password: 'password123',
),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
@@ -118,7 +119,7 @@ void main() {
email: '[email protected]',
password: 'password123',
),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
@@ -134,7 +135,7 @@ void main() {
expect(
() => service.logout(),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
});
@@ -152,7 +153,7 @@ void main() {
expect(
() => service.syncItemsToFirestore('user1'),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
@@ -165,7 +166,7 @@ void main() {
expect(
() => service.syncItemsToFirestore('user1'),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
@@ -181,7 +182,7 @@ void main() {
expect(
() => service.syncItemsFromFirestore('user1'),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
@@ -194,7 +195,7 @@ void main() {
expect(
() => service.syncItemsFromFirestore('user1'),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
});
@@ -215,7 +216,7 @@ void main() {
expect(
() => service.uploadFile(testFile, 'test/path.txt'),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
@@ -231,7 +232,7 @@ void main() {
expect(
() => service.uploadFile(testFile, 'test/path.txt'),
throwsA(isA<FirebaseException>()),
throwsA(isA<FirebaseServiceException>()),
);
});
});
@@ -1,6 +1,7 @@
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:dio/dio.dart';
import 'package:app_boilerplate/core/exceptions/immich_exception.dart';
import 'package:app_boilerplate/data/immich/immich_service.dart';
import 'package:app_boilerplate/data/immich/models/immich_asset.dart';
import 'package:app_boilerplate/data/local/local_storage_service.dart';
+1
View File
@@ -1,4 +1,5 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:app_boilerplate/core/exceptions/nostr_exception.dart';
import 'package:app_boilerplate/data/nostr/nostr_service.dart';
import 'package:app_boilerplate/data/nostr/models/nostr_keypair.dart';
import 'package:app_boilerplate/data/nostr/models/nostr_event.dart';
@@ -2,6 +2,7 @@ import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:path/path.dart' as path;
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:app_boilerplate/core/exceptions/session_exception.dart';
import 'package:app_boilerplate/data/session/session_service.dart';
import 'package:app_boilerplate/data/local/local_storage_service.dart';
import 'package:app_boilerplate/data/local/models/item.dart';
+1
View File
@@ -1,5 +1,6 @@
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:app_boilerplate/core/exceptions/sync_exception.dart';
import 'package:app_boilerplate/data/sync/sync_engine.dart';
import 'package:app_boilerplate/data/sync/models/sync_status.dart';
import 'package:app_boilerplate/data/sync/models/sync_operation.dart';
@@ -9,6 +9,7 @@ import 'package:app_boilerplate/data/nostr/models/nostr_keypair.dart';
import 'package:app_boilerplate/data/sync/sync_engine.dart';
import 'package:app_boilerplate/data/session/session_service.dart';
import 'package:app_boilerplate/data/firebase/firebase_service.dart';
import 'package:app_boilerplate/core/service_locator.dart';
import 'main_navigation_scaffold_test.mocks.dart';
@@ -42,17 +43,25 @@ void main() {
// Stub NostrService methods that might be called by UI
final mockKeyPair = NostrKeyPair.generate();
when(mockNostrService.generateKeyPair()).thenReturn(mockKeyPair);
// Register services with ServiceLocator
ServiceLocator.instance.registerServices(
localStorageService: mockLocalStorageService,
nostrService: mockNostrService,
syncEngine: mockSyncEngine,
sessionService: mockSessionService,
firebaseService: mockFirebaseService,
);
});
tearDown(() {
// Reset ServiceLocator after each test
ServiceLocator.instance.reset();
});
Widget createTestWidget() {
return MaterialApp(
home: MainNavigationScaffold(
sessionService: mockSessionService,
localStorageService: mockLocalStorageService,
nostrService: mockNostrService,
syncEngine: mockSyncEngine,
firebaseService: mockFirebaseService,
),
home: const MainNavigationScaffold(),
);
}