diff --git a/lib/database/database.dart b/lib/database/database.dart index 11301da..667b426 100644 --- a/lib/database/database.dart +++ b/lib/database/database.dart @@ -183,6 +183,12 @@ class AppDatabase extends _$AppDatabase { return changed == 1 || await getCloudOwnerUid(rideId) == normalizedUid; } + Future clearCloudOwnerUid(String uid) async { + if (uid.trim().isEmpty) return 0; + return (update(rides)..where((r) => r.cloudOwnerUid.equals(uid.trim()))) + .write(const RidesCompanion(cloudOwnerUid: Value(null))); + } + Future endRide(int rideId, RidesCompanion data) async { await (update(rides)..where((t) => t.id.equals(rideId))).write(data.copyWith(endTime: Value(DateTime.now()))); } diff --git a/test/auth_test.dart b/test/auth_test.dart index ec4d96f..9b51a84 100644 --- a/test/auth_test.dart +++ b/test/auth_test.dart @@ -11,6 +11,11 @@ import 'package:motorcycle_dash/services/auth/auth_providers.dart'; /// In-memory Mock AuthService for unit testing without live network / Firebase credentials class FakeAuthService implements AuthService { + @override bool get isEmailVerified => false; + @override Future sendEmailVerification() async {} + @override Future reloadCurrentUser() async {} + @override Future reauthenticate({String? password}) async {} + @override Future deleteCurrentUser() async {} final _stateController = StreamController.broadcast(); AuthState _currentState = const AuthState.unauthenticated(isFirebaseConfigured: true); bool _isConfigured = true; diff --git a/test/cloud_restore_manual_test.dart b/test/cloud_restore_manual_test.dart index d1fe23d..5ec273d 100644 --- a/test/cloud_restore_manual_test.dart +++ b/test/cloud_restore_manual_test.dart @@ -19,6 +19,11 @@ import 'package:motorcycle_dash/services/sync/cloud_restore_service.dart'; import 'package:motorcycle_dash/services/sync/r2_download_service.dart'; class _TestAuthService implements AuthService { + @override bool get isEmailVerified => false; + @override Future sendEmailVerification() async {} + @override Future reloadCurrentUser() async {} + @override Future reauthenticate({String? password}) async {} + @override Future deleteCurrentUser() async {} AuthUser? _user; String? token = 'token'; bool configured = true; diff --git a/test/cloud_sync_hardening_test.dart b/test/cloud_sync_hardening_test.dart index 29e0272..1398e6e 100644 --- a/test/cloud_sync_hardening_test.dart +++ b/test/cloud_sync_hardening_test.dart @@ -16,6 +16,11 @@ import 'package:motorcycle_dash/services/sync/sync_observer.dart'; import 'package:motorcycle_dash/features/rides/ride_state_machine.dart'; class TestMockAuthService implements AuthService { + @override bool get isEmailVerified => false; + @override Future sendEmailVerification() async {} + @override Future reloadCurrentUser() async {} + @override Future reauthenticate({String? password}) async {} + @override Future deleteCurrentUser() async {} AuthUser? _user; AuthState _state = const AuthState.unauthenticated(); diff --git a/test/firebase_sync_test.dart b/test/firebase_sync_test.dart index 0db25c0..95d9260 100644 --- a/test/firebase_sync_test.dart +++ b/test/firebase_sync_test.dart @@ -23,6 +23,11 @@ import 'package:motorcycle_dash/services/sync/sync_outbox.dart'; import 'package:motorcycle_dash/services/sync/sync_provider.dart'; class MockAuthService implements AuthService { + @override bool get isEmailVerified => false; + @override Future sendEmailVerification() async {} + @override Future reloadCurrentUser() async {} + @override Future reauthenticate({String? password}) async {} + @override Future deleteCurrentUser() async {} AuthUser? _user; AuthState _state = const AuthState.unauthenticated(); diff --git a/test/ownership_isolation_test.dart b/test/ownership_isolation_test.dart index 73e151a..bb61193 100644 --- a/test/ownership_isolation_test.dart +++ b/test/ownership_isolation_test.dart @@ -12,6 +12,11 @@ import 'package:motorcycle_dash/services/sync/sync_models.dart'; import 'package:motorcycle_dash/services/sync/firebase_sync_provider.dart'; class _Auth implements AuthService { + @override bool get isEmailVerified => false; + @override Future sendEmailVerification() async {} + @override Future reloadCurrentUser() async {} + @override Future reauthenticate({String? password}) async {} + @override Future deleteCurrentUser() async {} AuthUser? user; @override bool get isConfigured => true; @override AuthUser? get currentUser => user; diff --git a/test/r2_security_audit_test.dart b/test/r2_security_audit_test.dart index d855f6f..2304ddb 100644 --- a/test/r2_security_audit_test.dart +++ b/test/r2_security_audit_test.dart @@ -15,6 +15,11 @@ import 'package:motorcycle_dash/services/sync/sync_manager.dart'; import 'package:motorcycle_dash/services/sync/sync_provider.dart'; class MockSecurityAuthService implements AuthService { + @override bool get isEmailVerified => false; + @override Future sendEmailVerification() async {} + @override Future reloadCurrentUser() async {} + @override Future reauthenticate({String? password}) async {} + @override Future deleteCurrentUser() async {} AuthUser? _user; String? _token;