feat(test): comments, auth, feed

This commit is contained in:
mso7nueh
2025-11-28 14:13:05 +03:00
parent 7df32dabd2
commit 2a25be5aa4
12 changed files with 1774 additions and 1 deletions

View File

@@ -0,0 +1,237 @@
import 'package:eatvio_app/features/auth/models/credentials_model.dart';
import 'package:eatvio_app/features/auth/models/oauth_login_request.dart';
import 'package:eatvio_app/features/auth/models/oauth_model.dart';
import 'package:eatvio_app/features/auth/models/token_model.dart';
import 'package:eatvio_app/features/auth/repositories/auth_repository.dart';
import 'package:eatvio_app/features/auth/services/auth_service.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import '../../../fixtures/fixture_reader.dart';
import 'auth_repository_test.mocks.dart';
@GenerateNiceMocks([MockSpec<AuthService>()])
void main() {
group('AuthRepository', () {
late AuthRepository authRepository;
late MockAuthService mockAuthService;
late TokenModel tokenFixture;
late Map<String, dynamic> credentialsFixture;
late Map<String, dynamic> oauthSignInFixture;
late Map<String, dynamic> oauthSignUpFixture;
setUp(() {
tokenFixture = TokenModel.fromJson(FixtureReader.readAsMap('auth/token_response.json'));
credentialsFixture = FixtureReader.readAsMap('auth/login_credentials.json');
oauthSignInFixture = FixtureReader.readAsMap('auth/oauth_signin_request.json');
oauthSignUpFixture = FixtureReader.readAsMap('auth/oauth_signup_request.json');
mockAuthService = MockAuthService();
authRepository = AuthRepository(authService: mockAuthService);
});
test('getTokenByCredentials - успешное получение токена', () async {
final credentials = CredentialsModel(
email: credentialsFixture['email'] as String,
password: credentialsFixture['password'] as String,
);
when(mockAuthService.getTokenByCredentials(credentials: credentials))
.thenAnswer((_) async => tokenFixture);
final result = await authRepository.getTokenByCredentials(
credentialsFixture['email'] as String,
credentialsFixture['password'] as String,
);
expect(result, isA<TokenModel>());
expect(result.token, tokenFixture.token);
verify(mockAuthService.getTokenByCredentials(credentials: credentials)).called(1);
});
test('getTokenByCredentials - пробрасывает исключение', () async {
final credentials = CredentialsModel(
email: credentialsFixture['email'] as String,
password: credentialsFixture['password'] as String,
);
when(mockAuthService.getTokenByCredentials(credentials: credentials))
.thenThrow(Exception('Ошибка авторизации'));
expect(
() => authRepository.getTokenByCredentials(
credentialsFixture['email'] as String,
credentialsFixture['password'] as String,
),
throwsException,
);
});
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,
);
when(mockAuthService.signInViaSocialMedia(body: oauthRequest))
.thenAnswer((_) async => tokenFixture);
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,
);
expect(result, isA<TokenModel>());
expect(result.token, tokenFixture.token);
verify(mockAuthService.signInViaSocialMedia(body: oauthRequest)).called(1);
});
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,
);
when(mockAuthService.signInViaSocialMedia(body: oauthRequest))
.thenThrow(Exception('Ошибка OAuth'));
expect(
() => authRepository.signInViaSocialMedia(
provider: oauthSignInFixture['provider'] as String,
accessToken: oauthSignInFixture['accessToken'] as String,
refreshToken: oauthSignInFixture['refreshToken'] as String,
clientId: oauthSignInFixture['clientId'] as String,
),
throwsException,
);
});
test('signUpViaSocialMedia - успешная регистрация через соцсеть', () async {
final oauthModel = OAuthModel(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
gender: 'male', // Преобразуется из 'М'
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
);
when(mockAuthService.signUpViaSocialMedia(body: oauthModel))
.thenAnswer((_) async => <String, Object?>{'token': tokenFixture.token});
final result = await authRepository.signUpViaSocialMedia(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
gender: oauthSignUpFixture['gender'] as String,
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
);
expect(result, tokenFixture.token);
verify(mockAuthService.signUpViaSocialMedia(body: oauthModel)).called(1);
});
test('signUpViaSocialMedia - преобразует женский пол', () async {
final oauthModel = OAuthModel(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
gender: 'female', // Преобразуется из 'Ж'
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
);
when(mockAuthService.signUpViaSocialMedia(body: oauthModel))
.thenAnswer((_) async => <String, Object?>{'token': tokenFixture.token});
final result = await authRepository.signUpViaSocialMedia(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
gender: 'Ж',
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
);
expect(result, tokenFixture.token);
verify(mockAuthService.signUpViaSocialMedia(body: oauthModel)).called(1);
});
test('signUpViaSocialMedia - пробрасывает исключение', () async {
final oauthModel = OAuthModel(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
gender: 'male', // Преобразуется из 'М'
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
);
when(mockAuthService.signUpViaSocialMedia(body: oauthModel))
.thenThrow(Exception('Ошибка регистрации'));
expect(
() => authRepository.signUpViaSocialMedia(
provider: oauthSignUpFixture['provider'] as String,
accessToken: oauthSignUpFixture['accessToken'] as String,
id: oauthSignUpFixture['id'] as String,
refreshToken: oauthSignUpFixture['refreshToken'] as String,
firstName: oauthSignUpFixture['firstName'] as String,
lastName: oauthSignUpFixture['lastName'] as String,
email: oauthSignUpFixture['email'] as String,
phone: oauthSignUpFixture['phone'] as String,
dateOfBirth: oauthSignUpFixture['dateOfBirth'] as String,
gender: oauthSignUpFixture['gender'] as String,
weight: oauthSignUpFixture['weight'] as int,
height: oauthSignUpFixture['height'] as int,
clientId: oauthSignUpFixture['clientId'] as String,
),
throwsException,
);
});
});
}