import 'package:eatvio_app/features/profile/models/profile_model.dart'; import 'package:eatvio_app/features/settings/models/oauth_account_model.dart'; import 'package:eatvio_app/features/settings/models/oauth_attach_request.dart'; import 'package:eatvio_app/features/settings/models/profile_settings_model.dart'; import 'package:eatvio_app/features/settings/services/settings_service.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import '../../../fixtures/settings_fixtures.dart'; import 'settings_service_test.mocks.dart'; @GenerateNiceMocks([MockSpec()]) void main() { group('SettingsService', () { late MockSettingsService mockSettingsService; setUp(() { mockSettingsService = MockSettingsService(); }); test('getProfileSettings - возвращает настройки профиля', () async { final expectedSettings = SettingsFixtures.profileSettingsModel(); when(mockSettingsService.getProfileSettings()) .thenAnswer((_) async => expectedSettings); final result = await mockSettingsService.getProfileSettings(); expect(result, isA()); expect(result.isMoodFillable, true); expect(result.isPublicProfile, true); verify(mockSettingsService.getProfileSettings()).called(1); }); test('updateProfileSettings - обновляет настройки профиля', () async { final data = { 'is_mood_fillable': false, 'is_bedtime_fillable': false, 'is_public_profile': false, }; final expectedSettings = SettingsFixtures.profileSettingsUpdatedModel(); when(mockSettingsService.updateProfileSettings(data: data)) .thenAnswer((_) async => expectedSettings); final result = await mockSettingsService.updateProfileSettings(data: data); expect(result, isA()); expect(result.isMoodFillable, false); expect(result.isPublicProfile, false); verify(mockSettingsService.updateProfileSettings(data: data)).called(1); }); test('updateProfileDetails - обновляет детали профиля', () async { final data = { 'first_name': 'John', 'last_name': 'Doe', 'weight': 75.0, }; final expectedDetails = SettingsFixtures.profileDetailsModel(); when(mockSettingsService.updateProfileDetails(data: data)) .thenAnswer((_) async => expectedDetails); final result = await mockSettingsService.updateProfileDetails(data: data); expect(result, isA()); expect(result.firstName, expectedDetails.firstName); expect(result.weight, expectedDetails.weight); verify(mockSettingsService.updateProfileDetails(data: data)).called(1); }); test('getOAuthAccounts - возвращает список OAuth аккаунтов', () async { final expectedResponse = SettingsFixtures.oauthAccountsResponseModel(); when(mockSettingsService.getOAuthAccounts()) .thenAnswer((_) async => expectedResponse); final result = await mockSettingsService.getOAuthAccounts(); expect(result, isA()); expect(result.success, true); verify(mockSettingsService.getOAuthAccounts()).called(1); }); test('linkOAuthAccount - привязывает OAuth аккаунт', () async { const request = OAuthAttachRequest( provider: 'vk', accessToken: 'access_token', refreshToken: 'refresh_token', clientId: 'client_id', ); when(mockSettingsService.linkOAuthAccount(request)) .thenAnswer((_) async => Future.value()); await mockSettingsService.linkOAuthAccount(request); verify(mockSettingsService.linkOAuthAccount(request)).called(1); }); test('unlinkOAuthAccount - отвязывает OAuth аккаунт', () async { const provider = 'vk'; when(mockSettingsService.unlinkOAuthAccount(provider)) .thenAnswer((_) async => Future.value()); await mockSettingsService.unlinkOAuthAccount(provider); verify(mockSettingsService.unlinkOAuthAccount(provider)).called(1); }); }); }