import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:social_app/features/auth/data/auth_repository.dart'; import 'package:social_app/features/auth/data/auth_repository_impl.dart'; import 'package:social_app/features/auth/data/models/signup_request.dart'; import 'package:social_app/features/auth/data/models/login_request.dart'; import 'package:social_app/features/auth/data/models/auth_response.dart'; import 'package:social_app/core/storage/token_storage.dart'; class MockTokenStorage extends Mock implements TokenStorage {} class FakeSignupStartRequest extends Fake implements SignupStartRequest {} class FakeLoginRequest extends Fake implements LoginRequest {} void main() { late AuthRepository repository; late MockTokenStorage mockStorage; setUpAll(() { registerFallbackValue(FakeSignupStartRequest()); registerFallbackValue(FakeLoginRequest()); }); setUp(() { mockStorage = MockTokenStorage(); }); group('AuthRepository', () { test('signupStart returns SignupStartResponse', () async { final repo = _MockAuthRepository(); when(() => repo.signupStart(any())).thenAnswer( (_) async => const SignupStartResponse( status: 'pending_verification', email: 'test@example.com', message: 'Verification code sent', ), ); final result = await repo.signupStart( const SignupStartRequest( username: 'testuser', email: 'test@example.com', password: 'password123', ), ); expect(result.status, 'pending_verification'); expect(result.email, 'test@example.com'); }); test('login returns AuthResponse and saves tokens', () async { final repo = _MockAuthRepository(); when(() => repo.login(any())).thenAnswer( (_) async => AuthResponse( accessToken: 'access_token', refreshToken: 'refresh_token', expiresIn: 3600, tokenType: 'bearer', user: const AuthUser(id: '123', email: 'test@example.com'), ), ); final result = await repo.login( const LoginRequest(email: 'test@example.com', password: 'password123'), ); expect(result.accessToken, 'access_token'); expect(result.user.email, 'test@example.com'); }); }); } class _MockAuthRepository extends Mock implements AuthRepository {}