forked from eatvio/eatvio_app
feat(test): comments, auth, feed
This commit is contained in:
237
test/features/auth/repositories/auth_repository_test.dart
Normal file
237
test/features/auth/repositories/auth_repository_test.dart
Normal 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,
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user