Merge remote-tracking branch 'upstream/main'

This commit is contained in:
misha
2025-12-25 16:36:23 +03:00
41 changed files with 3705 additions and 3478 deletions

View File

@@ -1,35 +1,31 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/add_item_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
void main() {
group('AddItemButton smoke', () {
Widget wrap(Widget child) {
return MaterialApp.router(
theme: ThemeHelper().themeData(),
routerConfig: GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => Scaffold(body: child),
),
GoRoute(
path: '/blog-post-create',
name: 'blogPostCreateScreen',
builder: (context, state) => const SizedBox.shrink(),
),
],
),
);
}
testWidgets('renders add item button', (tester) async {
await tester.pumpWidget(wrap(const AddItemButton()));
await tester.pump();
expect(find.byType(AddItemButton), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/add_item_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
void main() {
group('AddItemButton smoke', () {
Widget wrap(Widget child) {
return MaterialApp.router(
theme: ThemeHelper().themeData(),
routerConfig: GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => Scaffold(body: child),
),
GoRoute(path: '/blog-post-create', name: 'blogPostCreateScreen', builder: (context, state) => const SizedBox.shrink()),
],
),
);
}
testWidgets('renders add item button', (tester) async {
await tester.pumpWidget(wrap(const AddItemButton()));
await tester.pump();
expect(find.byType(AddItemButton), findsOneWidget);
});
});
}

View File

@@ -1,31 +1,31 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/animated_option_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('AnimatedOptionButton smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders animated option button', (tester) async {
await tester.pumpWidget(wrap(AnimatedOptionButton(text: 'Option 1', isSelected: false, onTap: () {})));
await tester.pump();
expect(find.byType(AnimatedOptionButton), findsOneWidget);
expect(find.text('Option 1'), findsOneWidget);
});
testWidgets('renders animated option button as selected', (tester) async {
await tester.pumpWidget(wrap(AnimatedOptionButton(text: 'Option 2', isSelected: true, onTap: () {})));
await tester.pump();
expect(find.byType(AnimatedOptionButton), findsOneWidget);
expect(find.text('Option 2'), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/animated_option_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('AnimatedOptionButton smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders animated option button', (tester) async {
await tester.pumpWidget(wrap(AnimatedOptionButton(text: 'Option 1', isSelected: false, onTap: () {})));
await tester.pump();
expect(find.byType(AnimatedOptionButton), findsOneWidget);
expect(find.text('Option 1'), findsOneWidget);
});
testWidgets('renders animated option button as selected', (tester) async {
await tester.pumpWidget(wrap(AnimatedOptionButton(text: 'Option 2', isSelected: true, onTap: () {})));
await tester.pump();
expect(find.byType(AnimatedOptionButton), findsOneWidget);
expect(find.text('Option 2'), findsOneWidget);
});
});
}

View File

@@ -1,70 +1,74 @@
import 'package:eatvio_app/core/widgets/base_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('BaseButton', () {
testWidgets('renders as SizedBox.shrink', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: BaseButton(
text: 'Test Button',
onPressed: () {},
),
),
),
);
expect(find.byType(BaseButton), findsOneWidget);
expect(find.byType(SizedBox), findsWidgets);
});
testWidgets('accepts all parameters', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: BaseButton(
text: 'Test Button',
onPressed: () {},
buttonStyle: const ButtonStyle(),
buttonTextStyle: const TextStyle(),
isDisabled: false,
height: 50.0,
width: 100.0,
margin: const EdgeInsets.all(10),
alignment: Alignment.center,
),
),
),
);
expect(find.byType(BaseButton), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/widgets/base_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('BaseButton', () {
testWidgets('renders as SizedBox.shrink', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: BaseButton(
text: 'Test Button',
onPressed: () {},
),
),
),
);
expect(find.byType(BaseButton), findsOneWidget);
expect(find.byType(SizedBox), findsWidgets);
});
testWidgets('accepts all parameters', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: BaseButton(
text: 'Test Button',
onPressed: () {},
buttonStyle: const ButtonStyle(),
buttonTextStyle: const TextStyle(),
isDisabled: false,
height: 50.0,
width: 100.0,
margin: const EdgeInsets.all(10),
alignment: Alignment.center,
),
),
),
);
expect(find.byType(BaseButton), findsOneWidget);
});
});
}

View File

@@ -1,152 +1,156 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/bottom_sheet_with_blur.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('showBottomSheetWithBlur', () {
testWidgets('shows bottom sheet with blur', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('shows bottom sheet without blur when hasBlur is false', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
hasBlur: false,
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('accepts custom height', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
height: 300.0,
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('can be dismissed', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
await tester.tapAt(const Offset(0, 0));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsNothing);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/bottom_sheet_with_blur.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('showBottomSheetWithBlur', () {
testWidgets('shows bottom sheet with blur', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('shows bottom sheet without blur when hasBlur is false', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
hasBlur: false,
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('accepts custom height', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
height: 300.0,
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
});
testWidgets('can be dismissed', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showBottomSheetWithBlur(
context: context,
child: const Text('Test Content'),
);
},
child: const Text('Show Bottom Sheet'),
),
);
},
),
),
);
await tester.tap(find.text('Show Bottom Sheet'));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsOneWidget);
await tester.tapAt(const Offset(0, 0));
await tester.pumpAndSettle();
expect(find.text('Test Content'), findsNothing);
});
});
}

View File

@@ -1,31 +1,31 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/cpfc_container.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('CpfcContainer smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [Locale('ru')],
home: Scaffold(body: child),
);
}
testWidgets('renders cpfc container', (tester) async {
await tester.pumpWidget(wrap(const CpfcContainer(calories: 2000.0, proteins: 150.0, fats: 80.0, carbohydrates: 250.0)));
await tester.pump();
expect(find.byType(CpfcContainer), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/cpfc_container.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('CpfcContainer smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [Locale('ru')],
home: Scaffold(body: child),
);
}
testWidgets('renders cpfc container', (tester) async {
await tester.pumpWidget(wrap(const CpfcContainer(calories: 2000.0, proteins: 150.0, fats: 80.0, carbohydrates: 250.0)));
await tester.pump();
expect(find.byType(CpfcContainer), findsOneWidget);
});
});
}

View File

@@ -1,37 +1,160 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/custom_search_bar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('CustomSearchBar smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders custom search bar', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {})));
await tester.pump();
expect(find.byType(CustomSearchBar), findsOneWidget);
expect(find.byType(TextFormField), findsOneWidget);
});
testWidgets('renders custom search bar with icon', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {}, enableIcon: true)));
await tester.pump();
expect(find.byIcon(Icons.search), findsOneWidget);
});
testWidgets('renders custom search bar without icon', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {}, enableIcon: false)));
await tester.pump();
expect(find.byIcon(Icons.search), findsNothing);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/custom_search_bar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('CustomSearchBar smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders custom search bar', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {})));
await tester.pump();
expect(find.byType(CustomSearchBar), findsOneWidget);
expect(find.byType(TextFormField), findsOneWidget);
});
testWidgets('renders custom search bar with icon', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {}, enableIcon: true)));
await tester.pump();
expect(find.byIcon(Icons.search), findsOneWidget);
});
testWidgets('renders custom search bar without icon', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(wrap(CustomSearchBar(searchController: controller, onChanged: (_) {}, enableIcon: false)));
await tester.pump();
expect(find.byIcon(Icons.search), findsNothing);
});
testWidgets('calls onChanged when text is entered', (tester) async {
final controller = TextEditingController();
String? changedValue;
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {
changedValue = value;
},
),
),
),
);
await tester.enterText(find.byType(TextFormField), 'test');
await tester.pump();
expect(changedValue, 'test');
});
testWidgets('displays hint text', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {},
),
),
),
);
expect(find.text('Поиск'), findsOneWidget);
});
testWidgets('accepts custom width', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {},
width: 200.0,
),
),
),
);
expect(find.byType(CustomSearchBar), findsOneWidget);
});
testWidgets('accepts custom backgroundColor', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {},
backgroundColor: Colors.red,
),
),
),
);
expect(find.byType(CustomSearchBar), findsOneWidget);
});
testWidgets('accepts custom borderRadius', (tester) async {
final controller = TextEditingController();
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(
body: CustomSearchBar(
searchController: controller,
onChanged: (value) {},
borderRadius: 20.0,
),
),
),
);
expect(find.byType(CustomSearchBar), findsOneWidget);
});
});
}

View File

@@ -1,44 +1,44 @@
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/item_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ItemWidget smoke', () {
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'));
});
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders item widget', (tester) async {
await tester.pumpWidget(wrap(const ItemWidget(text: 'Test Item')));
await tester.pumpAndSettle();
expect(find.byType(ItemWidget), findsOneWidget);
expect(find.text('Test Item'), findsOneWidget);
});
testWidgets('renders item widget reversed', (tester) async {
await tester.pumpWidget(wrap(const ItemWidget(text: 'Test Item', reversed: true)));
await tester.pumpAndSettle();
expect(find.byType(ItemWidget), findsOneWidget);
expect(find.text('Test Item'), findsOneWidget);
});
});
}
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/item_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('ItemWidget smoke', () {
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'));
});
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders item widget', (tester) async {
await tester.pumpWidget(wrap(const ItemWidget(text: 'Test Item')));
await tester.pumpAndSettle();
expect(find.byType(ItemWidget), findsOneWidget);
expect(find.text('Test Item'), findsOneWidget);
});
testWidgets('renders item widget reversed', (tester) async {
await tester.pumpWidget(wrap(const ItemWidget(text: 'Test Item', reversed: true)));
await tester.pumpAndSettle();
expect(find.byType(ItemWidget), findsOneWidget);
expect(find.text('Test Item'), findsOneWidget);
});
});
}

View File

@@ -1,22 +1,22 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/loader.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('Loader smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders loader', (tester) async {
await tester.pumpWidget(wrap(const Loader()));
await tester.pump();
expect(find.byType(Loader), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/loader.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('Loader smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders loader', (tester) async {
await tester.pumpWidget(wrap(const Loader()));
await tester.pump();
expect(find.byType(Loader), findsOneWidget);
});
});
}

View File

@@ -1,37 +1,37 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/main_background_bouble.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MainBackgroundBouble smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders main background bouble', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
expect(find.text('Test'), findsOneWidget);
});
testWidgets('renders main background bouble with error', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(hasError: true, child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
});
testWidgets('renders main background bouble with shadow', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(enableShadow: true, child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/main_background_bouble.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MainBackgroundBouble smoke', () {
Widget wrap(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
home: Scaffold(body: child),
);
}
testWidgets('renders main background bouble', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
expect(find.text('Test'), findsOneWidget);
});
testWidgets('renders main background bouble with error', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(hasError: true, child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
});
testWidgets('renders main background bouble with shadow', (tester) async {
await tester.pumpWidget(wrap(const MainBackgroundBouble(enableShadow: true, child: Text('Test'))));
await tester.pump();
expect(find.byType(MainBackgroundBouble), findsOneWidget);
});
});
}

View File

@@ -1,93 +1,97 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/marketing_bottom_sheet.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MarketingBottomSheet', () {
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Scaffold(
body: child,
),
);
}
testWidgets('displays marketing bottom sheet', (tester) async {
await tester.pumpWidget(
createTestWidget(
const MarketingBottomSheet(),
),
);
expect(find.byType(MarketingBottomSheet), findsOneWidget);
});
testWidgets('shows marketing bottom sheet via function', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showMarketingBottomSheet(context);
},
child: const Text('Show'),
),
);
},
),
),
);
await tester.tap(find.text('Show'));
await tester.pumpAndSettle();
expect(find.byType(MarketingBottomSheet), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/marketing_bottom_sheet.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('MarketingBottomSheet', () {
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Scaffold(
body: child,
),
);
}
testWidgets('displays marketing bottom sheet', (tester) async {
await tester.pumpWidget(
createTestWidget(
const MarketingBottomSheet(),
),
);
expect(find.byType(MarketingBottomSheet), findsOneWidget);
});
testWidgets('shows marketing bottom sheet via function', (tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Builder(
builder: (context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
showMarketingBottomSheet(context);
},
child: const Text('Show'),
),
);
},
),
),
);
await tester.tap(find.text('Show'));
await tester.pumpAndSettle();
expect(find.byType(MarketingBottomSheet), findsOneWidget);
});
});
}

View File

@@ -1,82 +1,86 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/option_widget.dart';
import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('OptionWidget', () {
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Scaffold(body: child),
);
}
testWidgets('returns SizedBox.shrink when option is null', (tester) async {
await tester.pumpWidget(createTestWidget(const OptionWidget(option: null, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
expect(find.byType(SizedBox), findsWidgets);
});
testWidgets('displays option widget with option', (tester) async {
const option = PacketOptions(items: ['Item 1', 'Item 2'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: false);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
expect(find.text('Short'), findsOneWidget);
expect(find.text('Description'), findsOneWidget);
});
testWidgets('displays option widget with personal diet', (tester) async {
const option = PacketOptions(items: ['Item 1'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: true);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
});
testWidgets('hides duration when disableDuration is true', (tester) async {
const option = PacketOptions(items: ['Item 1'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: false);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7, disableDuration: true)));
expect(find.byType(OptionWidget), findsOneWidget);
});
});
}
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/core/widgets/option_widget.dart';
import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('OptionWidget', () {
Widget createTestWidget(Widget child) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
home: Scaffold(body: child),
);
}
testWidgets('returns SizedBox.shrink when option is null', (tester) async {
await tester.pumpWidget(createTestWidget(const OptionWidget(option: null, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
expect(find.byType(SizedBox), findsWidgets);
});
testWidgets('displays option widget with option', (tester) async {
const option = PacketOptions(items: ['Item 1', 'Item 2'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: false);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
expect(find.text('Short'), findsOneWidget);
expect(find.text('Description'), findsOneWidget);
});
testWidgets('displays option widget with personal diet', (tester) async {
const option = PacketOptions(items: ['Item 1'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: true);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7)));
expect(find.byType(OptionWidget), findsOneWidget);
});
testWidgets('hides duration when disableDuration is true', (tester) async {
const option = PacketOptions(items: ['Item 1'], price: 1000.0, short: 'Short', description: 'Description', hasPersonalDiet: false);
await tester.pumpWidget(createTestWidget(const OptionWidget(option: option, duration: 7, disableDuration: true)));
expect(find.byType(OptionWidget), findsOneWidget);
});
});
}