forked from eatvio/eatvio_app
Merge remote-tracking branch 'upstream/main'
This commit is contained in:
@@ -4,11 +4,12 @@ import 'package:flutter_test/flutter_test.dart';
|
||||
void main() {
|
||||
group('PrefsKeys', () {
|
||||
test('has all expected values', () {
|
||||
expect(PrefsKeys.values.length, 4);
|
||||
expect(PrefsKeys.values.length, 5);
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.hasAnonymousTokenBeenSent));
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.welcomeScreenWasShowed));
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.registrationDate));
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.marketingBottomSheetHasBeenShown));
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.isEmailVerificationSkipped));
|
||||
});
|
||||
|
||||
test('can be compared', () {
|
||||
@@ -21,6 +22,7 @@ void main() {
|
||||
expect(PrefsKeys.welcomeScreenWasShowed.name, 'welcomeScreenWasShowed');
|
||||
expect(PrefsKeys.registrationDate.name, 'registrationDate');
|
||||
expect(PrefsKeys.marketingBottomSheetHasBeenShown.name, 'marketingBottomSheetHasBeenShown');
|
||||
expect(PrefsKeys.isEmailVerificationSkipped.name, 'isEmailVerificationSkipped');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4,11 +4,12 @@ import 'package:flutter_test/flutter_test.dart';
|
||||
void main() {
|
||||
group('PrefsKeys', () {
|
||||
test('все значения enum определены', () {
|
||||
expect(PrefsKeys.values.length, 4);
|
||||
expect(PrefsKeys.values.length, 5);
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.hasAnonymousTokenBeenSent));
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.welcomeScreenWasShowed));
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.registrationDate));
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.marketingBottomSheetHasBeenShown));
|
||||
expect(PrefsKeys.values, contains(PrefsKeys.isEmailVerificationSkipped));
|
||||
});
|
||||
|
||||
test('имена ключей корректны', () {
|
||||
@@ -16,6 +17,7 @@ void main() {
|
||||
expect(PrefsKeys.welcomeScreenWasShowed.name, 'welcomeScreenWasShowed');
|
||||
expect(PrefsKeys.registrationDate.name, 'registrationDate');
|
||||
expect(PrefsKeys.marketingBottomSheetHasBeenShown.name, 'marketingBottomSheetHasBeenShown');
|
||||
expect(PrefsKeys.isEmailVerificationSkipped.name, 'isEmailVerificationSkipped');
|
||||
});
|
||||
|
||||
test('can be compared', () {
|
||||
|
||||
@@ -137,7 +137,6 @@ void main() {
|
||||
expect(find.text('Test Diet Name'), findsOneWidget);
|
||||
expect(find.text('100'), findsOneWidget); // totalViews
|
||||
expect(find.text('10'), findsOneWidget); // totalLikes
|
||||
expect(find.text('5'), findsOneWidget); // totalComments
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -433,6 +433,7 @@ void main() {
|
||||
final tempFile = File('${Directory.systemTemp.path}/test_image.jpg');
|
||||
await tempFile.writeAsBytes([1, 2, 3]);
|
||||
cubit.replaceImage(tempFile);
|
||||
cubit.replaceDescriptionInStep('Step 1 description', 0);
|
||||
|
||||
expect(cubit.validateAll(), true);
|
||||
});
|
||||
|
||||
@@ -220,7 +220,7 @@ void main() {
|
||||
|
||||
testWidgets('should display FinishDayButtonWidget', (WidgetTester tester) async {
|
||||
// Arrange
|
||||
final widget = FinishDayButtonWidget(onPressed: () async {});
|
||||
final widget = FinishDayButtonWidget(onPressed: () async {}, hasProducts: true);
|
||||
|
||||
// Act
|
||||
await tester.pumpWidget(createTestWidget(widget));
|
||||
@@ -234,7 +234,7 @@ void main() {
|
||||
// Arrange
|
||||
diaryCubit.emit(DiaryState.loaded(diary: testDiaryEntity, nutrition: testNutrition, selectedDay: DateTime(2024, 1, 15), selectedMeal: 1));
|
||||
|
||||
final widget = FinishDayButtonWidget(onPressed: () async {});
|
||||
final widget = FinishDayButtonWidget(onPressed: () async {}, hasProducts: true);
|
||||
|
||||
await tester.pumpWidget(createTestWidget(widget));
|
||||
await tester.pumpAndSettle();
|
||||
@@ -244,7 +244,8 @@ void main() {
|
||||
await tester.pump();
|
||||
|
||||
// Assert
|
||||
expect(find.text('Закончить день'), findsOneWidget);
|
||||
// Теперь на экране 2 текста "Закончить день": один на кнопке, другой в заголовке bottom sheet
|
||||
expect(find.text('Закончить день'), findsNWidgets(2));
|
||||
});
|
||||
|
||||
testWidgets('should display MealWidget with mood rating when showMood is true', (WidgetTester tester) async {
|
||||
|
||||
@@ -13,7 +13,7 @@ void main() {
|
||||
}
|
||||
|
||||
testWidgets('renders finish day button widget', (tester) async {
|
||||
await tester.pumpWidget(wrap(FinishDayButtonWidget(onPressed: () async {})));
|
||||
await tester.pumpWidget(wrap(FinishDayButtonWidget(onPressed: () async {}, hasProducts: true)));
|
||||
await tester.pump();
|
||||
|
||||
expect(find.byType(FinishDayButtonWidget), findsOneWidget);
|
||||
|
||||
@@ -33,7 +33,7 @@ void main() {
|
||||
expect(find.text('Сохранить'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('alert -> refuse triggers sendProductToModeration and success', (tester) async {
|
||||
testWidgets('alert -> refuse triggers sendProductToModeration and closes modal', (tester) async {
|
||||
final cubit = MockDiaryCubit();
|
||||
when(
|
||||
cubit.sendProductToModeration(
|
||||
@@ -65,9 +65,11 @@ void main() {
|
||||
await tester.pump();
|
||||
|
||||
await tester.tap(find.text('Отказаться'));
|
||||
await tester.pump();
|
||||
await tester.pumpAndSettle(); // Wait for navigation animation
|
||||
|
||||
expect(find.textContaining('Продукт успешно отправлен'), findsOneWidget);
|
||||
expect(find.textContaining('Продукт успешно отправлен'), findsNothing);
|
||||
expect(find.byType(GlossaryModerationRequestModalWidget), findsNothing);
|
||||
|
||||
verify(
|
||||
cubit.sendProductToModeration(
|
||||
name: anyNamed('name'),
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:eatvio_app/core/prefs.dart';
|
||||
import 'package:eatvio_app/core/prefs_keys.dart';
|
||||
import 'package:eatvio_app/features/profile/models/profile_model.dart';
|
||||
import 'package:eatvio_app/features/profile/repositories/profile_repository.dart';
|
||||
import 'package:eatvio_app/features/registration/presentation/bloc/verify_email_cubit/verify_email_cubit.dart';
|
||||
@@ -10,16 +12,18 @@ import 'package:mockito/mockito.dart';
|
||||
|
||||
import 'verify_email_cubit_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([MockSpec<ProfileRepository>()])
|
||||
@GenerateNiceMocks([MockSpec<ProfileRepository>(), MockSpec<Prefs>()])
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
group('VerifyEmailCubit', () {
|
||||
VerifyEmailCubit? cubit;
|
||||
late MockProfileRepository mockRepository;
|
||||
late MockPrefs mockPrefs;
|
||||
|
||||
setUp(() {
|
||||
mockRepository = MockProfileRepository();
|
||||
mockPrefs = MockPrefs();
|
||||
});
|
||||
|
||||
tearDown(() async {
|
||||
@@ -30,13 +34,13 @@ void main() {
|
||||
});
|
||||
|
||||
test('начальное состояние - loading', () {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository);
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
expect(cubit!.state, isA<VerifyEmailStateLoading>());
|
||||
});
|
||||
|
||||
test('sendEmailCode - успешная отправка кода', () async {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository);
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
const testProfile = ProfileModel(
|
||||
id: 1,
|
||||
@@ -69,7 +73,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('tryVerify - успешная верификация', () async {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository);
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
const testProfile = ProfileModel(
|
||||
id: 1,
|
||||
@@ -111,7 +115,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('tryVerify - неверный код', () async {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository);
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
const testProfile = ProfileModel(
|
||||
id: 1,
|
||||
@@ -145,7 +149,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('changeEmail - успешная смена email', () async {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository);
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
const testProfile = ProfileModel(
|
||||
id: 1,
|
||||
@@ -175,10 +179,20 @@ void main() {
|
||||
expect(cubit!.state, isA<VerifyEmailStateLoaded>());
|
||||
final loadedState = cubit!.state as VerifyEmailStateLoaded;
|
||||
expect(loadedState.email, 'new@example.com');
|
||||
expect(loadedState.email, 'new@example.com');
|
||||
});
|
||||
|
||||
test('skipVerification - пропуск верификации', () {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
cubit!.skipVerification();
|
||||
|
||||
verify(mockPrefs.setBool(PrefsKeys.isEmailVerificationSkipped, true)).called(1);
|
||||
expect(cubit!.state, isA<VerifyEmailStateSkipped>());
|
||||
});
|
||||
|
||||
test('sendEmailCode - обработка ошибки', () async {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository);
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
when(mockRepository.getMyProfile()).thenThrow(Exception('Network error'));
|
||||
|
||||
@@ -190,7 +204,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('tryVerify - обработка ошибки при верификации', () async {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository);
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
when(mockRepository.tryVerifyEmailByCode('123456')).thenThrow(Exception('Network error'));
|
||||
|
||||
@@ -200,7 +214,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('changeEmail - обработка ошибки', () async {
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository);
|
||||
cubit = VerifyEmailCubit(profileRepository: mockRepository, prefs: mockPrefs);
|
||||
|
||||
when(mockRepository.sendEmailCode(newEmail: 'new@example.com')).thenThrow(Exception('Network error'));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user