feat(tests): increased tests coverage

This commit is contained in:
misha
2025-12-25 12:56:38 +03:00
parent 5b705dfb72
commit 99659f7ea1
132 changed files with 10304 additions and 6226 deletions

View File

@@ -1,15 +1,23 @@
import 'package:eatvio_app/core/app_config.dart';
import 'package:eatvio_app/core/app_initializer.dart';
import 'package:eatvio_app/core/locator_service.dart';
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/features/chat/repositories/chat_repository.dart';
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart';
import 'package:eatvio_app/features/order_info/cubit/order_info_cubit.dart';
import 'package:eatvio_app/features/order_info/presentation/info_by_order_screen.dart';
import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart';
import 'package:eatvio_app/features/plans/models/chosen_plan_model.dart';
import 'package:eatvio_app/features/profile/repositories/profile_repository.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:network_image_mock/network_image_mock.dart';
import 'info_by_order_screen_test.mocks.dart';
@@ -20,14 +28,16 @@ void main() {
late MockProfileRepository mockProfileRepository;
late OrderInfoCubit orderInfoCubit;
setUpAll(() async {
dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost');
});
setUp(() async {
await sl.reset();
sl.registerLazySingleton<AppConfig>(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost'));
mockChatRepository = MockChatRepository();
mockProfileRepository = MockProfileRepository();
orderInfoCubit = OrderInfoCubit(
chatRepository: mockChatRepository,
profileRepository: mockProfileRepository,
);
orderInfoCubit = OrderInfoCubit(chatRepository: mockChatRepository, profileRepository: mockProfileRepository);
sl.registerLazySingleton<OrderInfoCubit>(() => orderInfoCubit);
});
@@ -45,17 +55,12 @@ void main() {
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [Locale('ru')],
home: InfoByOrderScreen(
planId: planId,
successfulPayment: successfulPayment,
customerSlug: customerSlug,
),
home: InfoByOrderScreen(planId: planId, successfulPayment: successfulPayment, customerSlug: customerSlug),
);
}
testWidgets('displays screen with loading state initially', (WidgetTester tester) async {
when(mockChatRepository.getChosenPlan(id: anyNamed('id')))
.thenThrow(Exception('Not implemented'));
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenThrow(Exception('Not implemented'));
await tester.pumpWidget(createTestWidget(planId: 1));
await tester.pump();
@@ -65,8 +70,7 @@ void main() {
});
testWidgets('calls getChosenPlan when screen is created', (WidgetTester tester) async {
when(mockChatRepository.getChosenPlan(id: anyNamed('id')))
.thenThrow(Exception('Not implemented'));
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenThrow(Exception('Not implemented'));
await tester.pumpWidget(createTestWidget(planId: 123));
await tester.pump();
@@ -75,8 +79,7 @@ void main() {
});
testWidgets('calls getChosenPlan when customerSlug is provided', (WidgetTester tester) async {
when(mockChatRepository.getChosenPlan(id: anyNamed('id')))
.thenThrow(Exception('Not implemented'));
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenThrow(Exception('Not implemented'));
await tester.pumpWidget(createTestWidget(planId: 123, customerSlug: 'test-user'));
await tester.pump();
@@ -86,8 +89,7 @@ void main() {
});
testWidgets('displays screen with back button', (WidgetTester tester) async {
when(mockChatRepository.getChosenPlan(id: anyNamed('id')))
.thenThrow(Exception('Not implemented'));
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenThrow(Exception('Not implemented'));
await tester.pumpWidget(createTestWidget(planId: 1));
await tester.pump();
@@ -95,6 +97,83 @@ void main() {
// Check for back button
expect(find.byIcon(Icons.arrow_back), findsOneWidget);
});
testWidgets('displays screen with loaded plan', (WidgetTester tester) async {
final chosenPlan = ChosenPlanModel(
id: 1,
optionType: 'options1',
startDate: DateTime(2024, 1, 1),
chosenPlanState: ChosenPlanStateEnum.stateStarted,
chatId: 'chat-1',
consultantId: 1,
plan: const PlanModel(
id: 1,
slug: 'test-plan',
name: 'Test Plan',
image: 'https://example.com/image.jpg',
duration: 30,
state: 'active',
type: PlanType(fit: true, slim: false, behavior: false, wellness: false),
details: 'Test details',
packetsCount: 3,
author: Author(authorSlug: 'author', authorName: 'Author Name', authorProfileIcon: 'https://example.com/icon.jpg', authorIsMe: false),
totalLikes: 10,
totalViews: 100,
totalComments: 5,
isFavorite: false,
minPriceOfOptions: 1000,
maxPriceOfOptions: 2000,
wasLikedByMe: false,
),
);
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenAnswer((_) async => chosenPlan);
await mockNetworkImagesFor(() async {
await tester.pumpWidget(createTestWidget(planId: 1));
await tester.pumpAndSettle();
});
expect(find.byType(InfoByOrderScreen), findsOneWidget);
});
testWidgets('displays screen with successful payment', (WidgetTester tester) async {
final chosenPlan = ChosenPlanModel(
id: 1,
optionType: 'options1',
startDate: DateTime(2024, 1, 1),
chosenPlanState: ChosenPlanStateEnum.stateStarted,
chatId: 'chat-1',
consultantId: 1,
plan: const PlanModel(
id: 1,
slug: 'test-plan',
name: 'Test Plan',
image: 'https://example.com/image.jpg',
duration: 30,
state: 'active',
type: PlanType(fit: true, slim: false, behavior: false, wellness: false),
details: 'Test details',
packetsCount: 3,
author: Author(authorSlug: 'author', authorName: 'Author Name', authorProfileIcon: 'https://example.com/icon.jpg', authorIsMe: false),
totalLikes: 10,
totalViews: 100,
totalComments: 5,
isFavorite: false,
minPriceOfOptions: 1000,
maxPriceOfOptions: 2000,
wasLikedByMe: false,
),
);
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenAnswer((_) async => chosenPlan);
await mockNetworkImagesFor(() async {
await tester.pumpWidget(createTestWidget(planId: 1, successfulPayment: true));
await tester.pumpAndSettle();
});
expect(find.byType(InfoByOrderScreen), findsOneWidget);
});
});
}