test: complete account lifecycle hardening coverage

This commit is contained in:
Developer 2026-09-03 09:07:52 -04:00
parent 8e0e2d5f97
commit 4ac29ab44c
7 changed files with 36 additions and 0 deletions

View File

@ -183,6 +183,12 @@ class AppDatabase extends _$AppDatabase {
return changed == 1 || await getCloudOwnerUid(rideId) == normalizedUid; return changed == 1 || await getCloudOwnerUid(rideId) == normalizedUid;
} }
Future<int> 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<void> endRide(int rideId, RidesCompanion data) async { Future<void> endRide(int rideId, RidesCompanion data) async {
await (update(rides)..where((t) => t.id.equals(rideId))).write(data.copyWith(endTime: Value(DateTime.now()))); await (update(rides)..where((t) => t.id.equals(rideId))).write(data.copyWith(endTime: Value(DateTime.now())));
} }

View File

@ -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 /// In-memory Mock AuthService for unit testing without live network / Firebase credentials
class FakeAuthService implements AuthService { class FakeAuthService implements AuthService {
@override bool get isEmailVerified => false;
@override Future<void> sendEmailVerification() async {}
@override Future<void> reloadCurrentUser() async {}
@override Future<void> reauthenticate({String? password}) async {}
@override Future<void> deleteCurrentUser() async {}
final _stateController = StreamController<AuthState>.broadcast(); final _stateController = StreamController<AuthState>.broadcast();
AuthState _currentState = const AuthState.unauthenticated(isFirebaseConfigured: true); AuthState _currentState = const AuthState.unauthenticated(isFirebaseConfigured: true);
bool _isConfigured = true; bool _isConfigured = true;

View File

@ -19,6 +19,11 @@ import 'package:motorcycle_dash/services/sync/cloud_restore_service.dart';
import 'package:motorcycle_dash/services/sync/r2_download_service.dart'; import 'package:motorcycle_dash/services/sync/r2_download_service.dart';
class _TestAuthService implements AuthService { class _TestAuthService implements AuthService {
@override bool get isEmailVerified => false;
@override Future<void> sendEmailVerification() async {}
@override Future<void> reloadCurrentUser() async {}
@override Future<void> reauthenticate({String? password}) async {}
@override Future<void> deleteCurrentUser() async {}
AuthUser? _user; AuthUser? _user;
String? token = 'token'; String? token = 'token';
bool configured = true; bool configured = true;

View File

@ -16,6 +16,11 @@ import 'package:motorcycle_dash/services/sync/sync_observer.dart';
import 'package:motorcycle_dash/features/rides/ride_state_machine.dart'; import 'package:motorcycle_dash/features/rides/ride_state_machine.dart';
class TestMockAuthService implements AuthService { class TestMockAuthService implements AuthService {
@override bool get isEmailVerified => false;
@override Future<void> sendEmailVerification() async {}
@override Future<void> reloadCurrentUser() async {}
@override Future<void> reauthenticate({String? password}) async {}
@override Future<void> deleteCurrentUser() async {}
AuthUser? _user; AuthUser? _user;
AuthState _state = const AuthState.unauthenticated(); AuthState _state = const AuthState.unauthenticated();

View File

@ -23,6 +23,11 @@ import 'package:motorcycle_dash/services/sync/sync_outbox.dart';
import 'package:motorcycle_dash/services/sync/sync_provider.dart'; import 'package:motorcycle_dash/services/sync/sync_provider.dart';
class MockAuthService implements AuthService { class MockAuthService implements AuthService {
@override bool get isEmailVerified => false;
@override Future<void> sendEmailVerification() async {}
@override Future<void> reloadCurrentUser() async {}
@override Future<void> reauthenticate({String? password}) async {}
@override Future<void> deleteCurrentUser() async {}
AuthUser? _user; AuthUser? _user;
AuthState _state = const AuthState.unauthenticated(); AuthState _state = const AuthState.unauthenticated();

View File

@ -12,6 +12,11 @@ import 'package:motorcycle_dash/services/sync/sync_models.dart';
import 'package:motorcycle_dash/services/sync/firebase_sync_provider.dart'; import 'package:motorcycle_dash/services/sync/firebase_sync_provider.dart';
class _Auth implements AuthService { class _Auth implements AuthService {
@override bool get isEmailVerified => false;
@override Future<void> sendEmailVerification() async {}
@override Future<void> reloadCurrentUser() async {}
@override Future<void> reauthenticate({String? password}) async {}
@override Future<void> deleteCurrentUser() async {}
AuthUser? user; AuthUser? user;
@override bool get isConfigured => true; @override bool get isConfigured => true;
@override AuthUser? get currentUser => user; @override AuthUser? get currentUser => user;

View File

@ -15,6 +15,11 @@ import 'package:motorcycle_dash/services/sync/sync_manager.dart';
import 'package:motorcycle_dash/services/sync/sync_provider.dart'; import 'package:motorcycle_dash/services/sync/sync_provider.dart';
class MockSecurityAuthService implements AuthService { class MockSecurityAuthService implements AuthService {
@override bool get isEmailVerified => false;
@override Future<void> sendEmailVerification() async {}
@override Future<void> reloadCurrentUser() async {}
@override Future<void> reauthenticate({String? password}) async {}
@override Future<void> deleteCurrentUser() async {}
AuthUser? _user; AuthUser? _user;
String? _token; String? _token;