diff --git a/lib/blocs/auth/auth_bloc.dart b/lib/blocs/auth/auth_bloc.dart index 7bd2b97..73e6ea9 100644 --- a/lib/blocs/auth/auth_bloc.dart +++ b/lib/blocs/auth/auth_bloc.dart @@ -1,13 +1,14 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:hacki/config/locator.dart'; +import 'package:hacki/extensions/extensions.dart'; import 'package:hacki/models/models.dart'; import 'package:hacki/repositories/repositories.dart'; part 'auth_event.dart'; part 'auth_state.dart'; -class AuthBloc extends Bloc { +class AuthBloc extends Bloc with Loggable { AuthBloc({ AuthRepository? authRepository, PreferenceRepository? preferenceRepository, @@ -48,6 +49,7 @@ class AuthBloc extends Bloc { /// then it will not be available from the API. user ??= User.emptyWithId(username); + logInfo('silently logged in as ${user.id}.'); emit( state.copyWith( isLoggedIn: true, @@ -56,6 +58,7 @@ class AuthBloc extends Bloc { ), ); } else { + logInfo('no previous session found.'); emit( state.copyWith( isLoggedIn: false, @@ -91,6 +94,7 @@ class AuthBloc extends Bloc { if (successful) { final User? user = await _hackerNewsRepository.fetchUser(id: event.username); + logInfo('user logged in as ${user?.id}.'); emit( state.copyWith( user: user ?? User.emptyWithId(event.username), @@ -111,9 +115,12 @@ class AuthBloc extends Bloc { agreedToEULA: false, ), ); - await _authRepository.logout(); await _preferenceRepository.updateUnreadCommentsIds([]); await _sembastRepository.deleteCachedComments(); + logInfo('user logged out'); } + + @override + String get logIdentifier => 'AuthBloc'; } diff --git a/lib/blocs/stories/stories_bloc.dart b/lib/blocs/stories/stories_bloc.dart index 5aca03c..80eb7da 100644 --- a/lib/blocs/stories/stories_bloc.dart +++ b/lib/blocs/stories/stories_bloc.dart @@ -653,5 +653,5 @@ class StoriesBloc extends Bloc with Loggable { } @override - String get logIdentifier => '[StoriesBloc]'; + String get logIdentifier => 'StoriesBloc'; } diff --git a/lib/config/locator.dart b/lib/config/locator.dart index 48137dc..355150f 100644 --- a/lib/config/locator.dart +++ b/lib/config/locator.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; -import 'package:hacki/config/custom_log_filter.dart'; +import 'package:hacki/config/logger/custom_log_filter.dart'; import 'package:hacki/cubits/cubits.dart'; import 'package:hacki/repositories/repositories.dart'; import 'package:hacki/services/services.dart'; diff --git a/lib/config/custom_log_filter.dart b/lib/config/logger/custom_log_filter.dart similarity index 100% rename from lib/config/custom_log_filter.dart rename to lib/config/logger/custom_log_filter.dart diff --git a/lib/config/file_output.dart b/lib/config/logger/file_output.dart similarity index 100% rename from lib/config/file_output.dart rename to lib/config/logger/file_output.dart diff --git a/lib/cubits/comments/comments_cubit.dart b/lib/cubits/comments/comments_cubit.dart index 2d38ecd..fba5f97 100644 --- a/lib/cubits/comments/comments_cubit.dart +++ b/lib/cubits/comments/comments_cubit.dart @@ -735,5 +735,5 @@ class CommentsCubit extends Cubit with Loggable { } @override - String get logIdentifier => '[CommentsCubit]'; + String get logIdentifier => 'CommentsCubit'; } diff --git a/lib/cubits/fav/fav_cubit.dart b/lib/cubits/fav/fav_cubit.dart index cd01737..72d54f1 100644 --- a/lib/cubits/fav/fav_cubit.dart +++ b/lib/cubits/fav/fav_cubit.dart @@ -227,7 +227,7 @@ class FavCubit extends Cubit with Loggable { } @override - String get logIdentifier => '[FavCubit]'; + String get logIdentifier => 'FavCubit'; } extension on FavCubit { diff --git a/lib/cubits/notification/notification_cubit.dart b/lib/cubits/notification/notification_cubit.dart index 04b68a3..8e57c39 100644 --- a/lib/cubits/notification/notification_cubit.dart +++ b/lib/cubits/notification/notification_cubit.dart @@ -259,5 +259,5 @@ class NotificationCubit extends Cubit with Loggable { } @override - String get logIdentifier => '[NotificationCubit]'; + String get logIdentifier => 'NotificationCubit'; } diff --git a/lib/cubits/preference/preference_cubit.dart b/lib/cubits/preference/preference_cubit.dart index e4778b6..52af966 100644 --- a/lib/cubits/preference/preference_cubit.dart +++ b/lib/cubits/preference/preference_cubit.dart @@ -95,5 +95,5 @@ class PreferenceCubit extends Cubit with Loggable { } @override - String get logIdentifier => '[PreferenceCubit]'; + String get logIdentifier => 'PreferenceCubit'; } diff --git a/lib/cubits/split_view/split_view_cubit.dart b/lib/cubits/split_view/split_view_cubit.dart index f4ba202..8201992 100644 --- a/lib/cubits/split_view/split_view_cubit.dart +++ b/lib/cubits/split_view/split_view_cubit.dart @@ -62,7 +62,7 @@ class SplitViewCubit extends HydratedCubit with Loggable { ); @override - String get logIdentifier => '[SplitViewCubit]'; + String get logIdentifier => 'SplitViewCubit'; static const String _submissionPanelWidthKey = 'submissionPanelWidth'; diff --git a/lib/cubits/tab/tab_cubit.dart b/lib/cubits/tab/tab_cubit.dart index 1b43d94..7d5cd10 100644 --- a/lib/cubits/tab/tab_cubit.dart +++ b/lib/cubits/tab/tab_cubit.dart @@ -44,5 +44,5 @@ class TabCubit extends Cubit with Loggable { } @override - String get logIdentifier => '[TabCubit]'; + String get logIdentifier => 'TabCubit'; } diff --git a/lib/extensions/date_time_extension.dart b/lib/extensions/date_time_extension.dart index 317c388..822ea5b 100644 --- a/lib/extensions/date_time_extension.dart +++ b/lib/extensions/date_time_extension.dart @@ -25,7 +25,7 @@ extension DateTimeExtension on DateTime { } else if (diff.inMinutes >= 1) { return '''${diff.inMinutes} $minuteStr${diff.inMinutes == 1 ? '' : 's'} ago'''; } else if (diff.inSeconds >= 1) { - return ''''${diff.inSeconds} $secondStr${diff.inSeconds == 1 ? '' : 's'} ago'''; + return '''${diff.inSeconds} $secondStr${diff.inSeconds == 1 ? '' : 's'} ago'''; } return 'just now'; } diff --git a/lib/extensions/loggable.dart b/lib/extensions/loggable.dart index 0aa4d55..7fbe666 100644 --- a/lib/extensions/loggable.dart +++ b/lib/extensions/loggable.dart @@ -14,7 +14,7 @@ mixin Loggable { StackTrace? stackTrace, }) { _logger.t( - '$logIdentifier $message', + '[$logIdentifier] $message', time: time, error: error, stackTrace: stackTrace, @@ -29,7 +29,7 @@ mixin Loggable { StackTrace? stackTrace, }) { _logger.d( - '$logIdentifier $message', + '[$logIdentifier] $message', time: time, error: error, stackTrace: stackTrace, @@ -44,7 +44,7 @@ mixin Loggable { StackTrace? stackTrace, }) { _logger.i( - '$logIdentifier $message', + '[$logIdentifier] $message', time: time, error: error, stackTrace: stackTrace, @@ -59,7 +59,7 @@ mixin Loggable { StackTrace? stackTrace, }) { _logger.w( - '$logIdentifier $message', + '[$logIdentifier] $message', time: time, error: error, stackTrace: stackTrace, @@ -74,7 +74,7 @@ mixin Loggable { StackTrace? stackTrace, }) { _logger.e( - '$logIdentifier $message', + '[$logIdentifier] $message', time: time, error: error, stackTrace: stackTrace, @@ -89,7 +89,7 @@ mixin Loggable { StackTrace? stackTrace, }) { _logger.f( - '$logIdentifier $message', + '[$logIdentifier] $message', time: time, error: error, stackTrace: stackTrace, diff --git a/lib/repositories/auth_repository.dart b/lib/repositories/auth_repository.dart index da992a4..1620975 100644 --- a/lib/repositories/auth_repository.dart +++ b/lib/repositories/auth_repository.dart @@ -130,5 +130,5 @@ class AuthRepository extends PostableRepository with Loggable { } @override - String get logIdentifier => '[AuthRepository]'; + String get logIdentifier => 'AuthRepository'; } diff --git a/lib/repositories/hacker_news_repository.dart b/lib/repositories/hacker_news_repository.dart index b90c1c6..730d2f8 100644 --- a/lib/repositories/hacker_news_repository.dart +++ b/lib/repositories/hacker_news_repository.dart @@ -432,7 +432,7 @@ class HackerNewsRepository with Loggable { } @override - String get logIdentifier => '[HackerNewsRepository]'; + String get logIdentifier => 'HackerNewsRepository'; } extension on Map { diff --git a/lib/repositories/offline_repository.dart b/lib/repositories/offline_repository.dart index 1a43096..8b92bf9 100644 --- a/lib/repositories/offline_repository.dart +++ b/lib/repositories/offline_repository.dart @@ -285,5 +285,5 @@ class OfflineRepository with Loggable { } @override - String get logIdentifier => '[OfflineRepository]'; + String get logIdentifier => 'OfflineRepository'; } diff --git a/lib/repositories/preference_repository.dart b/lib/repositories/preference_repository.dart index f5d73f2..c263c55 100644 --- a/lib/repositories/preference_repository.dart +++ b/lib/repositories/preference_repository.dart @@ -458,5 +458,5 @@ class PreferenceRepository with Loggable { static String _getHasReadKey(int storyId) => 'hasRead_$storyId'; @override - String get logIdentifier => '[PreferenceRepository]'; + String get logIdentifier => 'PreferenceRepository'; } diff --git a/lib/repositories/sembast_repository.dart b/lib/repositories/sembast_repository.dart index 3d932cd..37e430e 100644 --- a/lib/repositories/sembast_repository.dart +++ b/lib/repositories/sembast_repository.dart @@ -289,5 +289,5 @@ class SembastRepository with Loggable { } @override - String get logIdentifier => '[SembastRepository]'; + String get logIdentifier => 'SembastRepository'; } diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart index 852da27..723981d 100644 --- a/lib/screens/home/home_screen.dart +++ b/lib/screens/home/home_screen.dart @@ -331,5 +331,5 @@ class _HomeScreenState extends State } @override - String get logIdentifier => '[HomeScreen]'; + String get logIdentifier => 'HomeScreen'; } diff --git a/lib/screens/profile/widgets/settings.dart b/lib/screens/profile/widgets/settings.dart index 59bd293..2528892 100644 --- a/lib/screens/profile/widgets/settings.dart +++ b/lib/screens/profile/widgets/settings.dart @@ -1094,5 +1094,5 @@ class _SettingsState extends State with ItemActionMixin, Loggable { } @override - String get logIdentifier => '[Settings]'; + String get logIdentifier => 'Settings'; } diff --git a/lib/utils/log_util.dart b/lib/utils/log_util.dart index 4bf264a..04ccb74 100644 --- a/lib/utils/log_util.dart +++ b/lib/utils/log_util.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:hacki/config/constants.dart'; -import 'package:hacki/config/file_output.dart'; +import 'package:hacki/config/logger/file_output.dart'; import 'package:logger/logger.dart'; import 'package:path_provider/path_provider.dart'; diff --git a/test/blocs/auth/auth_bloc_test.dart b/test/blocs/auth/auth_bloc_test.dart index 22f7495..e4f7496 100644 --- a/test/blocs/auth/auth_bloc_test.dart +++ b/test/blocs/auth/auth_bloc_test.dart @@ -1,17 +1,12 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:hacki/blocs/blocs.dart'; +import 'package:hacki/config/locator.dart'; import 'package:hacki/models/models.dart'; -import 'package:hacki/repositories/repositories.dart'; +import 'package:logger/logger.dart'; import 'package:mocktail/mocktail.dart'; -class MockAuthRepository extends Mock implements AuthRepository {} - -class MockPreferenceRepository extends Mock implements PreferenceRepository {} - -class MockHackerNewsRepository extends Mock implements HackerNewsRepository {} - -class MockSembastRepository extends Mock implements SembastRepository {} +import '../../mocks/mocks.dart'; void main() { final MockAuthRepository mockAuthRepository = MockAuthRepository(); @@ -20,6 +15,8 @@ void main() { final MockHackerNewsRepository mockHackerNewsRepository = MockHackerNewsRepository(); final MockSembastRepository mockSembastRepository = MockSembastRepository(); + final MockLogger mockLogger = MockLogger(); + locator.registerSingleton(mockLogger); const int created = 0; const int delay = 1; diff --git a/test/mocks/logger.dart b/test/mocks/logger.dart new file mode 100644 index 0000000..e82bea3 --- /dev/null +++ b/test/mocks/logger.dart @@ -0,0 +1,4 @@ +import 'package:logger/logger.dart'; +import 'package:mocktail/mocktail.dart'; + +class MockLogger extends Mock implements Logger {} diff --git a/test/mocks/mocks.dart b/test/mocks/mocks.dart new file mode 100644 index 0000000..2a2d0b0 --- /dev/null +++ b/test/mocks/mocks.dart @@ -0,0 +1,5 @@ +export 'logger.dart'; +export 'repositories/auth_repository.dart'; +export 'repositories/hacker_news_repository.dart'; +export 'repositories/preference_repository.dart'; +export 'repositories/sembast_repository.dart'; diff --git a/test/mocks/repositories/auth_repository.dart b/test/mocks/repositories/auth_repository.dart new file mode 100644 index 0000000..d795d77 --- /dev/null +++ b/test/mocks/repositories/auth_repository.dart @@ -0,0 +1,4 @@ +import 'package:hacki/repositories/auth_repository.dart'; +import 'package:mocktail/mocktail.dart'; + +class MockAuthRepository extends Mock implements AuthRepository {} diff --git a/test/mocks/repositories/hacker_news_repository.dart b/test/mocks/repositories/hacker_news_repository.dart new file mode 100644 index 0000000..df49520 --- /dev/null +++ b/test/mocks/repositories/hacker_news_repository.dart @@ -0,0 +1,4 @@ +import 'package:hacki/repositories/hacker_news_repository.dart'; +import 'package:mocktail/mocktail.dart'; + +class MockHackerNewsRepository extends Mock implements HackerNewsRepository {} diff --git a/test/mocks/repositories/preference_repository.dart b/test/mocks/repositories/preference_repository.dart new file mode 100644 index 0000000..6e40407 --- /dev/null +++ b/test/mocks/repositories/preference_repository.dart @@ -0,0 +1,4 @@ +import 'package:hacki/repositories/preference_repository.dart'; +import 'package:mocktail/mocktail.dart'; + +class MockPreferenceRepository extends Mock implements PreferenceRepository {} diff --git a/test/mocks/repositories/sembast_repository.dart b/test/mocks/repositories/sembast_repository.dart new file mode 100644 index 0000000..9fcc005 --- /dev/null +++ b/test/mocks/repositories/sembast_repository.dart @@ -0,0 +1,4 @@ +import 'package:hacki/repositories/sembast_repository.dart'; +import 'package:mocktail/mocktail.dart'; + +class MockSembastRepository extends Mock implements SembastRepository {}