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/notifications/models/notification_model.dart'; import 'package:eatvio_app/features/notifications/presentation/notifications_cubit/notifications_cubit.dart'; import 'package:eatvio_app/features/notifications/presentation/notifications_cubit/notifications_state.dart'; import 'package:eatvio_app/features/notifications/presentation/notifications_screen.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.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 'notifications_screen_smoke_test.mocks.dart'; @GenerateNiceMocks([MockSpec()]) void main() { group('NotificationsScreen smoke', () { setUpAll(() async { dotenv.loadFromString(envString: 'DEV_BASE_URL=http://localhost\nBASE_URL=http://localhost'); }); setUp(() async { await sl.reset(); sl.registerLazySingleton(() => AppConfig(buildType: AppBuildType.tests)..setBaseUrl('http://localhost')); }); Widget wrap(NotificationsCubit cubit) { return MaterialApp( theme: ThemeHelper().themeData(), localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [Locale('ru')], home: BlocProvider.value(value: cubit, child: const NotificationsScreen()), ); } testWidgets('renders loaded state with notifications list', (tester) async { final cubit = MockNotificationsCubit(); final state = NotificationsState.loaded( notifications: [DiaryReminderNotification(type: NotificationType.diaryReminderNotification, isRead: false, createdAt: DateTime(2025, 1, 1))], notificationsCount: 1, isLoading: false, hasUnreadNotifications: true, currentPage: 1, hasNextPage: false, isLoadingMore: false, ); when(cubit.state).thenReturn(state); when(cubit.stream).thenAnswer((_) => const Stream.empty()); when(cubit.close()).thenAnswer((_) async => Future.value()); when(cubit.markNotificationsAsRead()).thenAnswer((_) async => Future.value()); await tester.pumpWidget(wrap(cubit)); await tester.pump(); expect(find.text('Уведомления'), findsOneWidget); expect(find.text(S.current.markAsRead), findsOneWidget); }); }); }