diff --git a/compass_app/app/lib/config/dependencies.dart b/compass_app/app/lib/config/dependencies.dart index 992015d06..acb50e24f 100644 --- a/compass_app/app/lib/config/dependencies.dart +++ b/compass_app/app/lib/config/dependencies.dart @@ -28,7 +28,6 @@ import '../data/repositories/user/user_repository_remote.dart'; import '../data/services/api/api_client.dart'; import '../data/services/api/auth_api_client.dart'; import '../data/services/local/local_data_service.dart'; -import '../data/services/shared_preferences_service.dart'; import '../domain/use_cases/booking/booking_create_use_case.dart'; import '../domain/use_cases/booking/booking_share_use_case.dart'; diff --git a/compass_app/app/lib/main.dart b/compass_app/app/lib/main.dart index 3c1a8d222..8149e562f 100644 --- a/compass_app/app/lib/main.dart +++ b/compass_app/app/lib/main.dart @@ -7,7 +7,6 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; import 'main_development.dart' as development; -import 'main_staging.dart' as staging; import 'routing/router.dart'; import 'ui/core/localization/applocalization.dart'; import 'ui/core/themes/theme.dart'; diff --git a/compass_app/app/lib/main_development.dart b/compass_app/app/lib/main_development.dart index 826863a22..b72466e37 100644 --- a/compass_app/app/lib/main_development.dart +++ b/compass_app/app/lib/main_development.dart @@ -17,10 +17,6 @@ Future main() async { WidgetsFlutterBinding.ensureInitialized(); Logger.root.level = Level.ALL; - Logger.root.onRecord.listen((record) { - print('${record.time}: [${record.level.name}] ${record.loggerName}: ${record.message}'); - }); - final sharedPrefsService = await SharedPreferencesService.create(); runApp( diff --git a/compass_app/app/test/data/services/shared_preferences_service_test.dart b/compass_app/app/test/data/services/shared_preferences_service_test.dart new file mode 100644 index 000000000..3e42e91a2 --- /dev/null +++ b/compass_app/app/test/data/services/shared_preferences_service_test.dart @@ -0,0 +1,89 @@ +import 'package:compass_app/data/services/shared_preferences_service.dart'; +import 'package:compass_app/utils/result.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +// --- Mock --- +class MockSharedPreferencesWithCache extends Mock + implements SharedPreferencesWithCache {} + +void main() { + late MockSharedPreferencesWithCache mockPrefs; + late SharedPreferencesService sut; + + setUp(() { + mockPrefs = MockSharedPreferencesWithCache(); + sut = SharedPreferencesService(mockPrefs); + }); + + group('fetchToken', () { + test('returns ok with token when prefs has a stored value', () async { + when(() => mockPrefs.getString('TOKEN')).thenReturn('my-token'); + + final result = await sut.fetchToken(); + + expect(result, isA>()); + expect((result as Ok).value, 'my-token'); + }); + + test('returns ok with null when no token is stored', () async { + when(() => mockPrefs.getString('TOKEN')).thenReturn(null); + + final result = await sut.fetchToken(); + + expect(result, isA>()); + expect((result as Ok).value, isNull); + }); + + test('returns error when getString throws an Exception', () async { + when(() => mockPrefs.getString('TOKEN')) + .thenThrow(Exception('read error')); + + final result = await sut.fetchToken(); + + expect(result, isA>()); + }); + }); + + group('saveToken', () { + test('calls setString and returns ok when token is not null', () async { + when(() => mockPrefs.setString('TOKEN', 'new-token')) + .thenAnswer((_) async {}); + + final result = await sut.saveToken('new-token'); + + expect(result, isA>()); + verify(() => mockPrefs.setString('TOKEN', 'new-token')).called(1); + verifyNever(() => mockPrefs.remove(any())); + }); + + test('calls remove and returns ok when token is null', () async { + when(() => mockPrefs.remove('TOKEN')).thenAnswer((_) async {}); + + final result = await sut.saveToken(null); + + expect(result, isA>()); + verify(() => mockPrefs.remove('TOKEN')).called(1); + verifyNever(() => mockPrefs.setString(any(), any())); + }); + + test('returns error when setString throws an Exception', () async { + when(() => mockPrefs.setString('TOKEN', any())) + .thenThrow(Exception('write error')); + + final result = await sut.saveToken('bad-token'); + + expect(result, isA>()); + }); + + test('returns error when remove throws an Exception', () async { + when(() => mockPrefs.remove('TOKEN')) + .thenThrow(Exception('remove error')); + + final result = await sut.saveToken(null); + + expect(result, isA>()); + }); + }); +} \ No newline at end of file