import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:eatvio_app/features/chat/presentation/bloc/chat_room_cubit/chat_room_cubit.dart'; import 'package:eatvio_app/features/chat/presentation/bloc/chat_room_cubit/chat_room_state.dart'; import 'package:eatvio_app/features/chat/presentation/widgets/notification_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_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'notification_banner_test.mocks.dart'; @GenerateNiceMocks([MockSpec()]) void main() { group('NotificationBanner Tests', () { Widget createTestWidget(Widget child, ChatRoomCubit? cubit) { return MaterialApp( theme: ThemeHelper().themeData(), localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [Locale('ru')], home: cubit != null ? BlocProvider( create: (_) => cubit, child: Scaffold(body: child), ) : Scaffold(body: child), ); } testWidgets('NotificationBanner - отображает баннер типа date', (WidgetTester tester) async { const widget = NotificationBanner( bannerType: BannerType.date, hasPersonalDiet: false, ); await tester.pumpWidget(createTestWidget(widget, null)); await tester.pumpAndSettle(); expect(find.byType(NotificationBanner), findsOneWidget); }); testWidgets('NotificationBanner - отображает баннер типа card', (WidgetTester tester) async { const widget = NotificationBanner( bannerType: BannerType.card, ); await tester.pumpWidget(createTestWidget(widget, null)); await tester.pumpAndSettle(); expect(find.byType(NotificationBanner), findsOneWidget); }); testWidgets('NotificationBanner - отображает баннер типа payment', (WidgetTester tester) async { final mockCubit = MockChatRoomCubit(); when(mockCubit.getPaymentLink()).thenAnswer((_) async => 'https://payment.link'); when(mockCubit.state).thenReturn(const ChatRoomState.loading()); const widget = NotificationBanner( bannerType: BannerType.payment, ); await tester.pumpWidget(createTestWidget(widget, mockCubit)); await tester.pumpAndSettle(); expect(find.byType(NotificationBanner), findsOneWidget); }); testWidgets('NotificationBanner - отображает баннер типа collectCharge', (WidgetTester tester) async { const widget = NotificationBanner( bannerType: BannerType.collectCharge, planName: 'Test Plan', planPrice: 1500.0, chosenPlanId: 1, ); await tester.pumpWidget(createTestWidget(widget, null)); await tester.pumpAndSettle(); expect(find.byType(NotificationBanner), findsOneWidget); expect(find.textContaining('Test Plan'), findsOneWidget); }); testWidgets('NotificationBanner - отображает баннер типа finishPlan', (WidgetTester tester) async { final mockCubit = MockChatRoomCubit(); when(mockCubit.finishChosenPlan()).thenAnswer((_) async => true); when(mockCubit.complainAboutConsultation(description: anyNamed('description'))).thenAnswer((_) async => true); const widget = NotificationBanner( bannerType: BannerType.finishPlan, planName: 'Test Plan', ); await tester.pumpWidget(createTestWidget(widget, mockCubit)); await tester.pumpAndSettle(); expect(find.byType(NotificationBanner), findsOneWidget); expect(find.textContaining('Test Plan'), findsOneWidget); }); testWidgets('NotificationBanner - отображает баннер типа setPersonalDiet', (WidgetTester tester) async { const widget = NotificationBanner( bannerType: BannerType.setPersonalDiet, ); await tester.pumpWidget(createTestWidget(widget, null)); await tester.pumpAndSettle(); expect(find.byType(NotificationBanner), findsOneWidget); }); }); }