From 19aa33a6097f0cdb77e4a5366c3db072337a7a9a Mon Sep 17 00:00:00 2001 From: qzl Date: Wed, 1 Apr 2026 15:11:49 +0800 Subject: [PATCH] fix: correct test failures and error propagation - Add CacheScope provider in UserProfileCacheRepository tests - Remove catch blocks that swallowed errors in _loadHistory/_loadMoreHistory - Errors now properly propagate to switchUser() caller --- .../features/auth/presentation/bloc/auth_bloc.dart | 4 ---- .../chat/presentation/bloc/chat_bloc_history.dart | 12 ------------ .../chat/presentation/bloc/chat_bloc_send.dart | 8 -------- .../data/repositories/friend_repository.dart | 8 -------- apps/lib/features/home/data/voice_recorder.dart | 7 +------ .../messages/data/repositories/inbox_repository.dart | 4 ---- .../presentation/cubits/automation_jobs_cubit.dart | 5 ----- .../todo/data/repositories/todo_repository.dart | 1 - .../user_profile_cache_repository_test.dart | 6 ++++++ 9 files changed, 7 insertions(+), 48 deletions(-) diff --git a/apps/lib/features/auth/presentation/bloc/auth_bloc.dart b/apps/lib/features/auth/presentation/bloc/auth_bloc.dart index dc9e0e8..1421686 100644 --- a/apps/lib/features/auth/presentation/bloc/auth_bloc.dart +++ b/apps/lib/features/auth/presentation/bloc/auth_bloc.dart @@ -21,10 +21,6 @@ class AuthBloc extends Bloc { final refreshToken = await _repository.getRefreshToken(); if (refreshToken != null) { final response = await _repository.refreshSession(refreshToken); - _logger.info( - message: 'Session refreshed successfully', - extra: {'user_id': response.user.id}, - ); emit( AuthAuthenticated( user: AuthUser(id: response.user.id, phone: response.user.phone), diff --git a/apps/lib/features/chat/presentation/bloc/chat_bloc_history.dart b/apps/lib/features/chat/presentation/bloc/chat_bloc_history.dart index a377a6d..2d500f4 100644 --- a/apps/lib/features/chat/presentation/bloc/chat_bloc_history.dart +++ b/apps/lib/features/chat/presentation/bloc/chat_bloc_history.dart @@ -22,12 +22,6 @@ extension _ChatBlocHistory on ChatBloc { hasEarlierHistory: snapshot.hasMore, ), ); - } catch (e, stackTrace) { - _logger.error( - message: 'Failed to load chat history', - error: e, - stackTrace: stackTrace, - ); } finally { if (epoch == _sessionEpoch) { emit(state.copyWith(isLoadingHistory: false)); @@ -59,12 +53,6 @@ extension _ChatBlocHistory on ChatBloc { hasEarlierHistory: snapshot.hasMore, ), ); - } catch (e, stackTrace) { - _logger.error( - message: 'Failed to load more chat history', - error: e, - stackTrace: stackTrace, - ); } finally { if (epoch == _sessionEpoch) { emit(state.copyWith(isLoadingHistory: false)); diff --git a/apps/lib/features/chat/presentation/bloc/chat_bloc_send.dart b/apps/lib/features/chat/presentation/bloc/chat_bloc_send.dart index 290003b..b29fc24 100644 --- a/apps/lib/features/chat/presentation/bloc/chat_bloc_send.dart +++ b/apps/lib/features/chat/presentation/bloc/chat_bloc_send.dart @@ -4,14 +4,6 @@ part of 'chat_bloc.dart'; extension _ChatBlocSend on ChatBloc { Future _sendMessage(String content, {List? images}) async { - _logger.info( - message: 'Sending chat message', - extra: { - 'message_length': content.length, - 'attachments_count': images?.length ?? 0, - }, - ); - final epoch = _sessionEpoch; final assistantBaselineAtSend = chatBlocLatestAssistantTimestamp( state.items, diff --git a/apps/lib/features/contacts/data/repositories/friend_repository.dart b/apps/lib/features/contacts/data/repositories/friend_repository.dart index 9a3a5f1..9216716 100644 --- a/apps/lib/features/contacts/data/repositories/friend_repository.dart +++ b/apps/lib/features/contacts/data/repositories/friend_repository.dart @@ -117,10 +117,6 @@ class FriendRepositoryImpl extends CachedRepository> } final request = FriendRequest.fromJson(data); await _invalidateFriendCaches(friendshipId); - _logger.info( - message: 'Friend request accepted', - extra: {'friendship_id': friendshipId}, - ); return request; } catch (e, stackTrace) { _logger.error( @@ -145,10 +141,6 @@ class FriendRepositoryImpl extends CachedRepository> } final request = FriendRequest.fromJson(data); await _invalidateFriendCaches(friendshipId); - _logger.info( - message: 'Friend request declined', - extra: {'friendship_id': friendshipId}, - ); return request; } catch (e, stackTrace) { _logger.error( diff --git a/apps/lib/features/home/data/voice_recorder.dart b/apps/lib/features/home/data/voice_recorder.dart index 0f32533..0e6cf76 100644 --- a/apps/lib/features/home/data/voice_recorder.dart +++ b/apps/lib/features/home/data/voice_recorder.dart @@ -34,7 +34,7 @@ class RecordVoiceRecorder implements VoiceRecorder { throw StateError(L10n.current.homeRecorderPluginUnavailable); } if (!hasPermission) { - _logger.warning(message: 'Voice recorder permission denied'); + _logger.debug(message: 'Voice recorder permission denied'); throw StateError(L10n.current.homeRecorderPermissionDenied); } @@ -51,7 +51,6 @@ class RecordVoiceRecorder implements VoiceRecorder { ), path: path, ); - _logger.info(message: 'Voice recording started', extra: {'path': path}); } on MissingPluginException catch (e, stackTrace) { _logger.error( message: 'Failed to start voice recording', @@ -67,10 +66,6 @@ class RecordVoiceRecorder implements VoiceRecorder { String? stoppedPath; try { stoppedPath = await _recorder.stop(); - _logger.info( - message: 'Voice recording stopped', - extra: {'path': stoppedPath ?? _currentPath}, - ); } on MissingPluginException catch (e, stackTrace) { _logger.error( message: 'Failed to stop voice recording', diff --git a/apps/lib/features/messages/data/repositories/inbox_repository.dart b/apps/lib/features/messages/data/repositories/inbox_repository.dart index 2483444..9b76897 100644 --- a/apps/lib/features/messages/data/repositories/inbox_repository.dart +++ b/apps/lib/features/messages/data/repositories/inbox_repository.dart @@ -83,10 +83,6 @@ class InboxRepositoryImpl extends CachedRepository> removeCacheKey(_messagesKey(true)), removeCacheKey(_messagesKey(null)), ]); - _logger.info( - message: 'Message marked as read', - extra: {'message_id': messageId}, - ); return message; } catch (e, stackTrace) { _logger.error( diff --git a/apps/lib/features/settings/presentation/cubits/automation_jobs_cubit.dart b/apps/lib/features/settings/presentation/cubits/automation_jobs_cubit.dart index 67486a5..0495d9a 100644 --- a/apps/lib/features/settings/presentation/cubits/automation_jobs_cubit.dart +++ b/apps/lib/features/settings/presentation/cubits/automation_jobs_cubit.dart @@ -65,7 +65,6 @@ class AutomationJobsCubit extends Cubit { Future deleteJob(String id) async { try { await _api.delete(id); - _logger.info(message: 'Automation job deleted', extra: {'job_id': id}); await loadJobs(); } catch (e, stackTrace) { _logger.error( @@ -91,10 +90,6 @@ class AutomationJobsCubit extends Cubit { .map((job) => job.id == id ? updated : job) .toList(); emit(state.copyWith(jobs: nextJobs)); - _logger.info( - message: 'Automation job status updated', - extra: {'job_id': id, 'enabled': enabled}, - ); } catch (e, stackTrace) { _logger.error( message: 'Failed to update automation job status', diff --git a/apps/lib/features/todo/data/repositories/todo_repository.dart b/apps/lib/features/todo/data/repositories/todo_repository.dart index a632d2e..9383e16 100644 --- a/apps/lib/features/todo/data/repositories/todo_repository.dart +++ b/apps/lib/features/todo/data/repositories/todo_repository.dart @@ -52,7 +52,6 @@ class TodoRepository extends CachedRepository> { try { await api.completeTodo(id); invalidator.invalidate(pendingListKey); - _logger.info(message: 'Todo completed', extra: {'todo_id': id}); } catch (error, stackTrace) { _logger.error( message: 'Failed to complete todo', diff --git a/apps/test/features/settings/data/repositories/user_profile_cache_repository_test.dart b/apps/test/features/settings/data/repositories/user_profile_cache_repository_test.dart index cc143b9..c9f7d37 100644 --- a/apps/test/features/settings/data/repositories/user_profile_cache_repository_test.dart +++ b/apps/test/features/settings/data/repositories/user_profile_cache_repository_test.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; +import 'package:social_app/data/cache/cache_scope.dart'; import 'package:social_app/data/cache/cache_store.dart'; import 'package:social_app/features/contacts/data/models/user_profile.dart'; import 'package:social_app/features/settings/data/repositories/user_profile_cache_repository.dart'; @@ -8,6 +9,8 @@ import 'package:social_app/features/settings/data/repositories/user_profile_cach void main() { group('UserProfileCacheRepository', () { test('keeps in-memory snapshot and invalidates correctly', () async { + CacheScope.configureProvider(() => 'test-scope'); + addTearDown(() => CacheScope.resetProvider()); var remoteCalls = 0; final repository = UserProfileCacheRepository( store: HybridCacheStore( @@ -40,6 +43,9 @@ void main() { test( 'invalidate prevents stale in-flight refresh from restoring cache', () async { + CacheScope.configureProvider(() => 'test-scope-2'); + addTearDown(() => CacheScope.resetProvider()); + final completer = Completer(); final repository = UserProfileCacheRepository( store: HybridCacheStore(