75 lines
2.4 KiB
Dart
75 lines
2.4 KiB
Dart
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 {}
|