forked from eatvio/eatvio_app
119 lines
4.4 KiB
Dart
119 lines
4.4 KiB
Dart
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<ChatRoomCubit>()])
|
|
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<ChatRoomCubit>(
|
|
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);
|
|
});
|
|
});
|
|
}
|
|
|