Files
social-app/apps/test/features/auth/data/auth_repository_test.dart
T
2026-02-25 14:51:21 +08:00

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 {}