test(tests): add whitespace to multiple test files for consistency and improved readability

This commit is contained in:
mso7nueh
2025-12-11 21:43:36 +03:00
parent c378c7fc16
commit 2408443a26
45 changed files with 1375 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
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/core/widgets/custom_outlined_button.dart';
import 'package:eatvio_app/features/order_info/presentation/widgets/collect_charge_banner.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/feed/models/plan_pagination_model.dart' show PlanModel, PlanType;
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart' show Author;
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:go_router/go_router.dart';
void main() {
group('CollectChargeBanner', () {
setUp(() async {
await sl.reset();
dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost');
sl.registerLazySingleton<AppConfig>(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost'));
});
Widget createTestWidget(Widget child) {
return MaterialApp.router(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [Locale('ru')],
routerConfig: GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => Portal(
child: Scaffold(body: SingleChildScrollView(child: child)),
),
),
],
),
);
}
testWidgets('should display collect charge banner with plan name and price', (WidgetTester tester) async {
// Arrange
final chosenPlan = ChosenPlanModel(
id: 1,
optionType: 'standard',
startDate: DateTime.now(),
chosenPlanState: ChosenPlanStateEnum.stateDone,
chatId: 'chat-1',
consultantId: 1,
plan: const PlanModel(
id: 1,
slug: 'test-plan',
name: 'Test Plan',
image: 'test.jpg',
duration: 30,
state: 'active',
type: PlanType(fit: true, slim: false, behavior: false, wellness: false),
details: 'Test details',
packetsCount: 1,
author: Author(authorSlug: '', authorName: '', authorProfileIcon: '', authorIsMe: false),
totalLikes: 0,
totalViews: 0,
totalComments: 0,
isFavorite: false,
minPriceOfOptions: 100.0,
maxPriceOfOptions: 500.0,
wasLikedByMe: false,
),
);
const price = 1000.0;
final widget = CollectChargeBanner(chosenPlan: chosenPlan, price: price);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(CollectChargeBanner), findsOneWidget);
expect(find.byType(CustomOutlinedButton), findsOneWidget);
});
testWidgets('should have button that navigates to card settings', (WidgetTester tester) async {
// Arrange
final chosenPlan = ChosenPlanModel(
id: 1,
optionType: 'standard',
startDate: DateTime.now(),
chosenPlanState: ChosenPlanStateEnum.stateDone,
chatId: 'chat-1',
consultantId: 1,
plan: const PlanModel(
id: 1,
slug: 'test-plan',
name: 'Test Plan',
image: 'test.jpg',
duration: 30,
state: 'active',
type: PlanType(fit: true, slim: false, behavior: false, wellness: false),
details: 'Test details',
packetsCount: 1,
author: Author(authorSlug: '', authorName: '', authorProfileIcon: '', authorIsMe: false),
totalLikes: 0,
totalViews: 0,
totalComments: 0,
isFavorite: false,
minPriceOfOptions: 100.0,
maxPriceOfOptions: 500.0,
wasLikedByMe: false,
),
);
const price = 1000.0;
final widget = CollectChargeBanner(chosenPlan: chosenPlan, price: price);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert - проверяем, что кнопка существует
expect(find.byType(CustomOutlinedButton), findsOneWidget);
});
});
}

View File

@@ -0,0 +1,84 @@
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/core/widgets/custom_outlined_button.dart';
import 'package:eatvio_app/core/widgets/loader.dart';
import 'package:eatvio_app/features/order_info/cubit/order_info_cubit.dart';
import 'package:eatvio_app/features/order_info/presentation/widgets/payment_banner.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:go_router/go_router.dart';
import 'payment_banner_test.mocks.dart';
@GenerateNiceMocks([MockSpec<OrderInfoCubit>()])
void main() {
group('PaymentBanner', () {
setUp(() async {
await sl.reset();
dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost');
sl.registerLazySingleton<AppConfig>(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost'));
});
Widget createTestWidget(Widget child, OrderInfoCubit cubit) {
return MaterialApp.router(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [Locale('ru')],
routerConfig: GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => Portal(
child: BlocProvider<OrderInfoCubit>(
create: (_) => cubit,
child: Scaffold(body: SingleChildScrollView(child: child)),
),
),
),
],
),
);
}
testWidgets('should display payment banner with successful payment', (WidgetTester tester) async {
// Arrange
final mockCubit = MockOrderInfoCubit();
const widget = PaymentBanner(successfulPayment: true);
// Act
await tester.pumpWidget(createTestWidget(widget, mockCubit));
await tester.pump();
// Assert
expect(find.byType(PaymentBanner), findsOneWidget);
});
testWidgets('should display payment banner with failed payment', (WidgetTester tester) async {
// Arrange
final mockCubit = MockOrderInfoCubit();
const widget = PaymentBanner(successfulPayment: false);
// Act
await tester.pumpWidget(createTestWidget(widget, mockCubit));
await tester.pump();
// Assert
expect(find.byType(PaymentBanner), findsOneWidget);
});
});
}

View File

@@ -0,0 +1,99 @@
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/order_info/presentation/widgets/plan_props.dart';
import 'package:eatvio_app/features/order_info/presentation/widgets/plan_status_box.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
void main() {
group('PlanProps', () {
setUp(() async {
await sl.reset();
dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost');
sl.registerLazySingleton<AppConfig>(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost'));
});
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [Locale('ru')],
home: Portal(
child: Scaffold(body: SingleChildScrollView(child: child)),
),
);
}
testWidgets('should display plan props with all information', (WidgetTester tester) async {
// Arrange
const planDuration = 30;
const planPrice = 1000.0;
const planStatus = PlanStatusValues.paid;
const widget = PlanProps(
planDuration: planDuration,
planPrice: planPrice,
planStatus: planStatus,
);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(PlanProps), findsOneWidget);
expect(find.byType(PlanStatusBox), findsOneWidget);
});
testWidgets('should display plan props with pending payment status', (WidgetTester tester) async {
// Arrange
const planDuration = 15;
const planPrice = 500.0;
const planStatus = PlanStatusValues.pendingPayment;
const widget = PlanProps(
planDuration: planDuration,
planPrice: planPrice,
planStatus: planStatus,
);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(PlanProps), findsOneWidget);
expect(find.byType(PlanStatusBox), findsOneWidget);
});
testWidgets('should display plan props with payment failed status', (WidgetTester tester) async {
// Arrange
const planDuration = 7;
const planPrice = 200.0;
const planStatus = PlanStatusValues.paymentFailed;
const widget = PlanProps(
planDuration: planDuration,
planPrice: planPrice,
planStatus: planStatus,
);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(PlanProps), findsOneWidget);
expect(find.byType(PlanStatusBox), findsOneWidget);
});
});
}

View File

@@ -0,0 +1,114 @@
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/order_info/presentation/widgets/plan_state.dart';
import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
void main() {
group('PlanState', () {
setUp(() async {
await sl.reset();
dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost');
sl.registerLazySingleton<AppConfig>(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost'));
});
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [Locale('ru')],
home: Portal(
child: Scaffold(body: SingleChildScrollView(child: child)),
),
);
}
testWidgets('should display plan state without personal diet', (WidgetTester tester) async {
// Arrange
const widget = PlanState(
state: ChosenPlanStateEnum.statePaid,
hasPersonalDiet: false,
);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(PlanState), findsOneWidget);
});
testWidgets('should display plan state with personal diet', (WidgetTester tester) async {
// Arrange
const widget = PlanState(
state: ChosenPlanStateEnum.statePaid,
hasPersonalDiet: true,
);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(PlanState), findsOneWidget);
});
testWidgets('should display different states correctly', (WidgetTester tester) async {
// Arrange
const widget = PlanState(
state: ChosenPlanStateEnum.stateInProgress,
hasPersonalDiet: false,
);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(PlanState), findsOneWidget);
});
testWidgets('should display done state', (WidgetTester tester) async {
// Arrange
const widget = PlanState(
state: ChosenPlanStateEnum.stateDone,
hasPersonalDiet: false,
);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(PlanState), findsOneWidget);
});
testWidgets('should display state with personal diet set', (WidgetTester tester) async {
// Arrange
const widget = PlanState(
state: ChosenPlanStateEnum.personalDietSet,
hasPersonalDiet: true,
);
// Act
await tester.pumpWidget(createTestWidget(widget));
await tester.pump();
// Assert
expect(find.byType(PlanState), findsOneWidget);
});
});
}