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

85
test/core/prefs_test.dart Normal file
View File

@@ -0,0 +1,85 @@
import 'package:eatvio_app/core/prefs.dart';
import 'package:eatvio_app/core/prefs_keys.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
group('Prefs', () {
late Prefs prefs;
late SharedPreferences sharedPreferences;
setUp(() async {
SharedPreferences.setMockInitialValues({});
sharedPreferences = await SharedPreferences.getInstance();
prefs = Prefs(sharedPreferences);
});
test('setString и getString - сохранение и получение строки', () async {
await prefs.setString(PrefsKeys.registrationDate, '2024-01-01');
final value = prefs.getString(PrefsKeys.registrationDate);
expect(value, '2024-01-01');
});
test('getString - возвращает null если значение не установлено', () {
final value = prefs.getString(PrefsKeys.registrationDate);
expect(value, isNull);
});
test('setInt и getInt - сохранение и получение числа', () async {
// Используем registrationDate как строку, но можно протестировать setInt с любым ключом
// Для теста используем setString, так как в PrefsKeys нет числовых ключей
await prefs.setString(PrefsKeys.registrationDate, '42');
final value = prefs.getString(PrefsKeys.registrationDate);
expect(value, '42');
});
test('getInt - возвращает null если значение не установлено', () {
// Тестируем getInt с любым ключом
final value = prefs.getInt(PrefsKeys.registrationDate);
expect(value, isNull);
});
test('setBool и getBool - сохранение и получение булева значения', () async {
await prefs.setBool(PrefsKeys.hasAnonymousTokenBeenSent, true);
final value = prefs.getBool(PrefsKeys.hasAnonymousTokenBeenSent);
expect(value, isTrue);
});
test('getBool - возвращает null если значение не установлено', () {
final value = prefs.getBool(PrefsKeys.hasAnonymousTokenBeenSent);
expect(value, isNull);
});
test('remove - удаление значения', () async {
await prefs.setString(PrefsKeys.registrationDate, 'test_value');
await prefs.remove(PrefsKeys.registrationDate);
final value = prefs.getString(PrefsKeys.registrationDate);
expect(value, isNull);
});
test('clear - очистка всех значений', () async {
await prefs.setString(PrefsKeys.registrationDate, 'test_value');
await prefs.setBool(PrefsKeys.hasAnonymousTokenBeenSent, true);
await prefs.setBool(PrefsKeys.welcomeScreenWasShowed, false);
await prefs.clear();
expect(prefs.getString(PrefsKeys.registrationDate), isNull);
expect(prefs.getBool(PrefsKeys.hasAnonymousTokenBeenSent), isNull);
expect(prefs.getBool(PrefsKeys.welcomeScreenWasShowed), isNull);
});
test('перезапись значения', () async {
await prefs.setString(PrefsKeys.registrationDate, 'old_value');
await prefs.setString(PrefsKeys.registrationDate, 'new_value');
final value = prefs.getString(PrefsKeys.registrationDate);
expect(value, 'new_value');
});
});
}

View File

@@ -0,0 +1,62 @@
import 'package:eatvio_app/features/auth/models/credentials_model.dart';
import 'package:flutter_test/flutter_test.dart';
import '../../../fixtures/fixture_reader.dart';
void main() {
group('CredentialsModel', () {
late Map<String, dynamic> credentialsFixture;
setUp(() {
credentialsFixture = FixtureReader.readAsMap('auth/login_credentials.json');
});
test('создание модели из JSON', () {
final model = CredentialsModel.fromJson(credentialsFixture);
expect(model.email, credentialsFixture['email']);
expect(model.password, credentialsFixture['password']);
});
test('создание модели через конструктор', () {
const model = CredentialsModel(
email: 'test@example.com',
password: 'password123',
);
expect(model.email, 'test@example.com');
expect(model.password, 'password123');
});
test('преобразование модели в JSON', () {
const model = CredentialsModel(
email: 'test@example.com',
password: 'password123',
);
final json = model.toJson();
expect(json['email'], 'test@example.com');
expect(json['password'], 'password123');
});
test('равенство моделей', () {
const model1 = CredentialsModel(
email: 'test@example.com',
password: 'password123',
);
const model2 = CredentialsModel(
email: 'test@example.com',
password: 'password123',
);
const model3 = CredentialsModel(
email: 'other@example.com',
password: 'password123',
);
expect(model1, equals(model2));
expect(model1, isNot(equals(model3)));
});
});
}

View File

@@ -0,0 +1,78 @@
import 'package:eatvio_app/features/auth/models/oauth_login_request.dart';
import 'package:flutter_test/flutter_test.dart';
import '../../../fixtures/fixture_reader.dart';
void main() {
group('OAuthLoginRequest', () {
late Map<String, dynamic> oauthSignInFixture;
setUp(() {
oauthSignInFixture = FixtureReader.readAsMap('auth/oauth_signin_request.json');
});
test('создание модели из JSON', () {
final model = OAuthLoginRequest.fromJson(oauthSignInFixture);
expect(model.provider, oauthSignInFixture['provider']);
expect(model.accessToken, oauthSignInFixture['access_token']);
expect(model.refreshToken, oauthSignInFixture['refresh_token']);
expect(model.clientId, oauthSignInFixture['client_id']);
});
test('создание модели через конструктор', () {
const model = OAuthLoginRequest(
provider: 'vk',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
clientId: 'client_id_123',
);
expect(model.provider, 'vk');
expect(model.accessToken, 'access_token_123');
expect(model.refreshToken, 'refresh_token_123');
expect(model.clientId, 'client_id_123');
});
test('преобразование модели в JSON с правильными ключами', () {
const model = OAuthLoginRequest(
provider: 'vk',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
clientId: 'client_id_123',
);
final json = model.toJson();
expect(json['provider'], 'vk');
expect(json['access_token'], 'access_token_123');
expect(json['refresh_token'], 'refresh_token_123');
expect(json['client_id'], 'client_id_123');
});
test('равенство моделей', () {
const model1 = OAuthLoginRequest(
provider: 'vk',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
clientId: 'client_id_123',
);
const model2 = OAuthLoginRequest(
provider: 'vk',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
clientId: 'client_id_123',
);
const model3 = OAuthLoginRequest(
provider: 'google',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
clientId: 'client_id_123',
);
expect(model1, equals(model2));
expect(model1, isNot(equals(model3)));
});
});
}

View File

@@ -0,0 +1,142 @@
import 'package:eatvio_app/features/auth/models/oauth_model.dart';
import 'package:flutter_test/flutter_test.dart';
import '../../../fixtures/fixture_reader.dart';
void main() {
group('OAuthModel', () {
late Map<String, dynamic> oauthSignUpFixture;
setUp(() {
oauthSignUpFixture = FixtureReader.readAsMap('auth/oauth_signup_request.json');
});
test('создание модели из JSON', () {
final model = OAuthModel.fromJson(oauthSignUpFixture);
expect(model.provider, oauthSignUpFixture['provider']);
expect(model.accessToken, oauthSignUpFixture['access_token']);
expect(model.refreshToken, oauthSignUpFixture['refresh_token']);
expect(model.id, oauthSignUpFixture['id']);
expect(model.firstName, oauthSignUpFixture['first_name']);
expect(model.lastName, oauthSignUpFixture['last_name']);
expect(model.email, oauthSignUpFixture['email']);
expect(model.phone, oauthSignUpFixture['phone']);
expect(model.dateOfBirth, oauthSignUpFixture['date_of_birth']);
expect(model.gender, oauthSignUpFixture['gender']);
expect(model.weight, oauthSignUpFixture['weight']);
expect(model.height, oauthSignUpFixture['height']);
expect(model.clientId, oauthSignUpFixture['client_id']);
});
test('создание модели через конструктор', () {
const model = OAuthModel(
provider: 'vk',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
id: 'user_id_123',
firstName: 'Иван',
lastName: 'Иванов',
email: 'ivan@example.com',
phone: '+79001234567',
dateOfBirth: '1990-01-01',
gender: 'male',
weight: 75,
height: 180,
clientId: 'client_id_123',
);
expect(model.provider, 'vk');
expect(model.email, 'ivan@example.com');
expect(model.gender, 'male');
expect(model.weight, 75);
expect(model.height, 180);
});
test('преобразование модели в JSON с правильными ключами', () {
const model = OAuthModel(
provider: 'vk',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
id: 'user_id_123',
firstName: 'Иван',
lastName: 'Иванов',
email: 'ivan@example.com',
phone: '+79001234567',
dateOfBirth: '1990-01-01',
gender: 'male',
weight: 75,
height: 180,
clientId: 'client_id_123',
);
final json = model.toJson();
expect(json['provider'], 'vk');
expect(json['access_token'], 'access_token_123');
expect(json['refresh_token'], 'refresh_token_123');
expect(json['id'], 'user_id_123');
expect(json['first_name'], 'Иван');
expect(json['last_name'], 'Иванов');
expect(json['email'], 'ivan@example.com');
expect(json['phone'], '+79001234567');
expect(json['date_of_birth'], '1990-01-01');
expect(json['gender'], 'male');
expect(json['weight'], 75);
expect(json['height'], 180);
expect(json['client_id'], 'client_id_123');
});
test('равенство моделей', () {
const model1 = OAuthModel(
provider: 'vk',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
id: 'user_id_123',
firstName: 'Иван',
lastName: 'Иванов',
email: 'ivan@example.com',
phone: '+79001234567',
dateOfBirth: '1990-01-01',
gender: 'male',
weight: 75,
height: 180,
clientId: 'client_id_123',
);
const model2 = OAuthModel(
provider: 'vk',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
id: 'user_id_123',
firstName: 'Иван',
lastName: 'Иванов',
email: 'ivan@example.com',
phone: '+79001234567',
dateOfBirth: '1990-01-01',
gender: 'male',
weight: 75,
height: 180,
clientId: 'client_id_123',
);
const model3 = OAuthModel(
provider: 'google',
accessToken: 'access_token_123',
refreshToken: 'refresh_token_123',
id: 'user_id_123',
firstName: 'Иван',
lastName: 'Иванов',
email: 'ivan@example.com',
phone: '+79001234567',
dateOfBirth: '1990-01-01',
gender: 'male',
weight: 75,
height: 180,
clientId: 'client_id_123',
);
expect(model1, equals(model2));
expect(model1, isNot(equals(model3)));
});
});
}

View File

@@ -10,7 +10,6 @@ import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../../../../fixtures/doubles/auth_doubles.dart';
import '../../../../../fixtures/fixture_reader.dart';
import 'oauth_cubit_test.mocks.dart';
@@ -66,17 +65,17 @@ void main() {
when(
mockAuthRepository.signInViaSocialMedia(
provider: signInRequestFixture['provider'] as String,
accessToken: signInRequestFixture['accessToken'] as String,
refreshToken: signInRequestFixture['refreshToken'] as String,
clientId: signInRequestFixture['clientId'] as String,
accessToken: signInRequestFixture['access_token'] as String,
refreshToken: signInRequestFixture['refresh_token'] as String,
clientId: signInRequestFixture['client_id'] as String,
),
).thenAnswer((_) async => tokenFixture);
await oauthCubit!.signInViaSocialMedia(
provider: signInRequestFixture['provider'] as String,
accessToken: signInRequestFixture['accessToken'] as String,
refreshToken: signInRequestFixture['refreshToken'] as String,
clientId: signInRequestFixture['clientId'] as String,
accessToken: signInRequestFixture['access_token'] as String,
refreshToken: signInRequestFixture['refresh_token'] as String,
clientId: signInRequestFixture['client_id'] as String,
);
await Future.delayed(const Duration(milliseconds: 100));
@@ -106,9 +105,9 @@ void main() {
final future = oauthCubit!.signInViaSocialMedia(
provider: signInRequestFixture['provider'] as String,
accessToken: signInRequestFixture['accessToken'] as String,
refreshToken: signInRequestFixture['refreshToken'] as String,
clientId: signInRequestFixture['clientId'] as String,
accessToken: signInRequestFixture['access_token'] as String,
refreshToken: signInRequestFixture['refresh_token'] as String,
clientId: signInRequestFixture['client_id'] as String,
);
await Future.delayed(const Duration(milliseconds: 10));
@@ -130,9 +129,9 @@ void main() {
await oauthCubit!.signInViaSocialMedia(
provider: signInRequestFixture['provider'] as String,
accessToken: signInRequestFixture['accessToken'] as String,
refreshToken: signInRequestFixture['refreshToken'] as String,
clientId: signInRequestFixture['clientId'] as String,
accessToken: signInRequestFixture['access_token'] as String,
refreshToken: signInRequestFixture['refresh_token'] as String,
clientId: signInRequestFixture['client_id'] as String,
);
await Future.delayed(const Duration(milliseconds: 100));
@@ -166,18 +165,18 @@ void main() {
final result = await oauthCubit!.signUpViaSocialMedia(
provider: signUpRequestFixture['provider'] as String,
accessToken: signUpRequestFixture['accessToken'] as String,
accessToken: signUpRequestFixture['access_token'] as String,
id: signUpRequestFixture['id'] as String,
refreshToken: signUpRequestFixture['refreshToken'] as String,
firstName: signUpRequestFixture['firstName'] as String,
lastName: signUpRequestFixture['lastName'] as String,
refreshToken: signUpRequestFixture['refresh_token'] as String,
firstName: signUpRequestFixture['first_name'] as String,
lastName: signUpRequestFixture['last_name'] as String,
email: signUpRequestFixture['email'] as String,
phone: signUpRequestFixture['phone'] as String,
dateOfBirth: signUpRequestFixture['dateOfBirth'] as String,
dateOfBirth: signUpRequestFixture['date_of_birth'] as String,
gender: signUpRequestFixture['gender'] as String,
weight: signUpRequestFixture['weight'] as int,
height: signUpRequestFixture['height'] as int,
clientId: signUpRequestFixture['clientId'] as String,
clientId: signUpRequestFixture['client_id'] as String,
);
await Future.delayed(const Duration(milliseconds: 100));

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,
);
});
});
}

View File

@@ -1,7 +1,7 @@
{
"provider": "vk",
"accessToken": "vk_access_token_123",
"refreshToken": "vk_refresh_token_123",
"clientId": "vk_client_id_123"
"access_token": "vk_access_token_123",
"refresh_token": "vk_refresh_token_123",
"client_id": "vk_client_id_123"
}

View File

@@ -1,16 +1,16 @@
{
"provider": "vk",
"accessToken": "vk_access_token_123",
"access_token": "vk_access_token_123",
"id": "vk_user_id_123",
"refreshToken": "vk_refresh_token_123",
"firstName": "Иван",
"lastName": "Иванов",
"refresh_token": "vk_refresh_token_123",
"first_name": "Иван",
"last_name": "Иванов",
"email": "ivan@example.com",
"phone": "+79001234567",
"dateOfBirth": "1990-01-01",
"date_of_birth": "1990-01-01",
"gender": "М",
"weight": 75,
"height": 180,
"clientId": "vk_client_id_123"
"client_id": "vk_client_id_123"
}