feat(test): oauth, prefs, credentials

This commit is contained in:
mso7nueh
2025-11-28 14:22:05 +03:00
parent 2a25be5aa4
commit 9fcfac87d4
9 changed files with 624 additions and 76 deletions

View File

@@ -71,9 +71,9 @@ void main() {
test('signInViaSocialMedia - успешный вход через соцсеть', () async {
final oauthRequest = OAuthLoginRequest(
provider: oauthSignInFixture['provider'] as String,
accessToken: oauthSignInFixture['accessToken'] as String,
refreshToken: oauthSignInFixture['refreshToken'] as String,
clientId: oauthSignInFixture['clientId'] as String,
accessToken: oauthSignInFixture['access_token'] as String,
refreshToken: oauthSignInFixture['refresh_token'] as String,
clientId: oauthSignInFixture['client_id'] as String,
);
when(mockAuthService.signInViaSocialMedia(body: oauthRequest))
@@ -81,9 +81,9 @@ void main() {
final result = await authRepository.signInViaSocialMedia(
provider: oauthSignInFixture['provider'] as String,
accessToken: oauthSignInFixture['accessToken'] as String,
refreshToken: oauthSignInFixture['refreshToken'] as String,
clientId: oauthSignInFixture['clientId'] as String,
accessToken: oauthSignInFixture['access_token'] as String,
refreshToken: oauthSignInFixture['refresh_token'] as String,
clientId: oauthSignInFixture['client_id'] as String,
);
expect(result, isA<TokenModel>());
@@ -94,9 +94,9 @@ void main() {
test('signInViaSocialMedia - пробрасывает исключение', () async {
final oauthRequest = OAuthLoginRequest(
provider: oauthSignInFixture['provider'] as String,
accessToken: oauthSignInFixture['accessToken'] as String,
refreshToken: oauthSignInFixture['refreshToken'] as String,
clientId: oauthSignInFixture['clientId'] as String,
accessToken: oauthSignInFixture['access_token'] as String,
refreshToken: oauthSignInFixture['refresh_token'] as String,
clientId: oauthSignInFixture['client_id'] as String,
);
when(mockAuthService.signInViaSocialMedia(body: oauthRequest))
@@ -105,9 +105,9 @@ void main() {
expect(
() => authRepository.signInViaSocialMedia(
provider: oauthSignInFixture['provider'] as String,
accessToken: oauthSignInFixture['accessToken'] as String,
refreshToken: oauthSignInFixture['refreshToken'] as String,
clientId: oauthSignInFixture['clientId'] as String,
accessToken: oauthSignInFixture['access_token'] as String,
refreshToken: oauthSignInFixture['refresh_token'] as String,
clientId: oauthSignInFixture['client_id'] as String,
),
throwsException,
);
@@ -116,18 +116,18 @@ void main() {
test('signUpViaSocialMedia - успешная регистрация через соцсеть', () async {
final oauthModel = OAuthModel(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
accessToken: oauthSignUpFixture['access_token'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
refreshToken: oauthSignUpFixture['refresh_token'] as String,
firstName: oauthSignUpFixture['first_name'] as String,
lastName: oauthSignUpFixture['last_name'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
dateOfBirth: oauthSignUpFixture['date_of_birth'] as String,
gender: 'male', // Преобразуется из 'М'
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
clientId: oauthSignUpFixture['client_id'] as String,
);
when(mockAuthService.signUpViaSocialMedia(body: oauthModel))
@@ -135,18 +135,18 @@ void main() {
final result = await authRepository.signUpViaSocialMedia(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
accessToken: oauthSignUpFixture['access_token'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
refreshToken: oauthSignUpFixture['refresh_token'] as String,
firstName: oauthSignUpFixture['first_name'] as String,
lastName: oauthSignUpFixture['last_name'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
dateOfBirth: oauthSignUpFixture['date_of_birth'] as String,
gender: oauthSignUpFixture['gender'] as String,
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
clientId: oauthSignUpFixture['client_id'] as String,
);
expect(result, tokenFixture.token);
@@ -156,18 +156,18 @@ void main() {
test('signUpViaSocialMedia - преобразует женский пол', () async {
final oauthModel = OAuthModel(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
accessToken: oauthSignUpFixture['access_token'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
refreshToken: oauthSignUpFixture['refresh_token'] as String,
firstName: oauthSignUpFixture['first_name'] as String,
lastName: oauthSignUpFixture['last_name'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
dateOfBirth: oauthSignUpFixture['date_of_birth'] as String,
gender: 'female', // Преобразуется из 'Ж'
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
clientId: oauthSignUpFixture['client_id'] as String,
);
when(mockAuthService.signUpViaSocialMedia(body: oauthModel))
@@ -175,18 +175,18 @@ void main() {
final result = await authRepository.signUpViaSocialMedia(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
accessToken: oauthSignUpFixture['access_token'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
refreshToken: oauthSignUpFixture['refresh_token'] as String,
firstName: oauthSignUpFixture['first_name'] as String,
lastName: oauthSignUpFixture['last_name'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
dateOfBirth: oauthSignUpFixture['date_of_birth'] as String,
gender: 'Ж',
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
clientId: oauthSignUpFixture['client_id'] as String,
);
expect(result, tokenFixture.token);
@@ -196,18 +196,18 @@ void main() {
test('signUpViaSocialMedia - пробрасывает исключение', () async {
final oauthModel = OAuthModel(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
accessToken: oauthSignUpFixture['access_token'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
refreshToken: oauthSignUpFixture['refresh_token'] as String,
firstName: oauthSignUpFixture['first_name'] as String,
lastName: oauthSignUpFixture['last_name'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
dateOfBirth: oauthSignUpFixture['date_of_birth'] as String,
gender: 'male', // Преобразуется из 'М'
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
clientId: oauthSignUpFixture['client_id'] as String,
);
when(mockAuthService.signUpViaSocialMedia(body: oauthModel))
@@ -216,18 +216,18 @@ void main() {
expect(
() => authRepository.signUpViaSocialMedia(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
accessToken: oauthSignUpFixture['access_token'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
refreshToken: oauthSignUpFixture['refresh_token'] as String,
firstName: oauthSignUpFixture['first_name'] as String,
lastName: oauthSignUpFixture['last_name'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
dateOfBirth: oauthSignUpFixture['date_of_birth'] as String,
gender: oauthSignUpFixture['gender'] as String,
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
clientId: oauthSignUpFixture['client_id'] as String,
),
throwsException,
);

View File

@@ -0,0 +1,182 @@
import 'package:dio/dio.dart';
import 'package:eatvio_app/features/auth/repositories/reset_password_repository.dart';
import 'package:eatvio_app/features/auth/services/reset_password_service.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:retrofit/retrofit.dart';
import '../../../fixtures/fixture_reader.dart';
import 'reset_password_repository_test.mocks.dart';
@GenerateNiceMocks([MockSpec<ResetPasswordService>()])
void main() {
group('ResetPasswordRepository', () {
late ResetPasswordRepository resetPasswordRepository;
late MockResetPasswordService mockResetPasswordService;
late Map<String, dynamic> resetPasswordFixture;
setUp(() {
resetPasswordFixture = FixtureReader.readAsMap('auth/reset_password_request.json');
mockResetPasswordService = MockResetPasswordService();
resetPasswordRepository = ResetPasswordRepository(
resetPasswordService: mockResetPasswordService,
);
});
test('sendEmailCodeForPasswordChange - успешная отправка кода (200)', () async {
final email = resetPasswordFixture['email'] as String;
final response = HttpResponse(
{'success': true},
Response(
statusCode: 200,
requestOptions: RequestOptions(path: '/api/send_password_reset_code'),
),
);
when(mockResetPasswordService.sendEmailCodeForPasswordChange(
data: {'email': email},
)).thenAnswer((_) async => response);
final result = await resetPasswordRepository.sendEmailCodeForPasswordChange(email);
expect(result, isTrue);
verify(mockResetPasswordService.sendEmailCodeForPasswordChange(
data: {'email': email},
)).called(1);
});
test('sendEmailCodeForPasswordChange - ошибка отправки кода (400)', () async {
final email = resetPasswordFixture['email'] as String;
final response = HttpResponse(
{'error': 'Invalid email'},
Response(
statusCode: 400,
requestOptions: RequestOptions(path: '/api/send_password_reset_code'),
),
);
when(mockResetPasswordService.sendEmailCodeForPasswordChange(
data: {'email': email},
)).thenAnswer((_) async => response);
final result = await resetPasswordRepository.sendEmailCodeForPasswordChange(email);
expect(result, isFalse);
});
test('sendEmailCodeForPasswordChange - пробрасывает исключение', () async {
final email = resetPasswordFixture['email'] as String;
when(mockResetPasswordService.sendEmailCodeForPasswordChange(
data: {'email': email},
)).thenThrow(Exception('Ошибка сети'));
expect(
() => resetPasswordRepository.sendEmailCodeForPasswordChange(email),
throwsException,
);
});
test('confirmPasswordChange - успешный сброс пароля (200)', () async {
final code = resetPasswordFixture['code'] as String;
final password = resetPasswordFixture['password'] as String;
final passwordConfirmation = resetPasswordFixture['passwordConfirmation'] as String;
final email = resetPasswordFixture['email'] as String;
final response = HttpResponse(
{'success': true},
Response(
statusCode: 200,
requestOptions: RequestOptions(path: '/api/confirm_password_reset_code'),
),
);
when(mockResetPasswordService.confirmPasswordChange(
data: {
'code': code,
'password': password,
'password_confirmation': passwordConfirmation,
'email': email,
},
)).thenAnswer((_) async => response);
final result = await resetPasswordRepository.confirmPasswordChange(
code,
password,
passwordConfirmation,
email,
);
expect(result, isTrue);
verify(mockResetPasswordService.confirmPasswordChange(
data: {
'code': code,
'password': password,
'password_confirmation': passwordConfirmation,
'email': email,
},
)).called(1);
});
test('confirmPasswordChange - ошибка сброса пароля (400)', () async {
final code = resetPasswordFixture['code'] as String;
final password = resetPasswordFixture['password'] as String;
final passwordConfirmation = resetPasswordFixture['passwordConfirmation'] as String;
final email = resetPasswordFixture['email'] as String;
final response = HttpResponse(
{'error': 'Invalid code'},
Response(
statusCode: 400,
requestOptions: RequestOptions(path: '/api/confirm_password_reset_code'),
),
);
when(mockResetPasswordService.confirmPasswordChange(
data: {
'code': code,
'password': password,
'password_confirmation': passwordConfirmation,
'email': email,
},
)).thenAnswer((_) async => response);
final result = await resetPasswordRepository.confirmPasswordChange(
code,
password,
passwordConfirmation,
email,
);
expect(result, isFalse);
});
test('confirmPasswordChange - пробрасывает исключение', () async {
final code = resetPasswordFixture['code'] as String;
final password = resetPasswordFixture['password'] as String;
final passwordConfirmation = resetPasswordFixture['passwordConfirmation'] as String;
final email = resetPasswordFixture['email'] as String;
when(mockResetPasswordService.confirmPasswordChange(
data: {
'code': code,
'password': password,
'password_confirmation': passwordConfirmation,
'email': email,
},
)).thenThrow(Exception('Ошибка сети'));
expect(
() => resetPasswordRepository.confirmPasswordChange(
code,
password,
passwordConfirmation,
email,
),
throwsException,
);
});
});
}