From b1c747f3ef04bbb6fe617683a7a10e7126ac0eb6 Mon Sep 17 00:00:00 2001 From: DatDang Date: Mon, 22 Jul 2024 11:41:42 +0700 Subject: [PATCH] TF-2976 Add widget test for EmailTileBuilder for web --- .../widgets/email_tile_web_builder_test.dart | 206 ++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 test/features/thread/presentation/widgets/email_tile_web_builder_test.dart diff --git a/test/features/thread/presentation/widgets/email_tile_web_builder_test.dart b/test/features/thread/presentation/widgets/email_tile_web_builder_test.dart new file mode 100644 index 000000000..99221cb91 --- /dev/null +++ b/test/features/thread/presentation/widgets/email_tile_web_builder_test.dart @@ -0,0 +1,206 @@ +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:get/get.dart'; +import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; +import 'package:model/email/presentation_email.dart'; +import 'package:model/mailbox/select_mode.dart'; +import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_web_builder.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations_delegate.dart'; +import 'package:tmail_ui_user/main/localizations/localization_service.dart'; + +void main() { + setUpAll(() { + Get.put(ResponsiveUtils()); + Get.put(ImagePaths()); + }); + + group('EmailTileBuilder test:', () { + testWidgets( + 'Should display checkbox image ' + 'and InkWell with hover color AppColor.colorEmailTileHoverWeb ' + 'when app is running in desktop layout', + (tester) async { + // arrange + final widgetUnderTest = EmailTileBuilder( + presentationEmail: PresentationEmail(), + selectAllMode: SelectMode.INACTIVE, + isShowingEmailContent: false, + ); + debugDefaultTargetPlatformOverride = TargetPlatform.macOS; + final dpi = tester.view.devicePixelRatio; + tester.view.physicalSize = Size(dpi * 1920 * 2, dpi * 1080 * 2); + + // act + await tester.pumpWidget( + GetMaterialApp( + localizationsDelegates: const [ + AppLocalizationsDelegate(), + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate], + supportedLocales: LocalizationService.supportedLocales, + home: Scaffold(body: widgetUnderTest))); + await tester.pump(); + + // assert + expect( + find.byWidgetPredicate( + (widget) => widget is SvgPicture + && widget.bytesLoader is SvgAssetLoader + && (widget.bytesLoader as SvgAssetLoader).assetName == ImagePaths().icCheckboxUnselected + ), + findsOneWidget); + expect( + find.byWidgetPredicate( + (widget) => widget is InkWell + && widget.hoverColor == AppColor.colorEmailTileHoverWeb + ), + findsOneWidget); + + // clean up + debugDefaultTargetPlatformOverride = null; + tester.view.reset(); + }); + + testWidgets( + 'Should not display any checkbox image ' + 'and InkWell with hover color AppColor.colorEmailTileHoverWeb ' + 'when app is not running in desktop layout', + (tester) async { + // arrange + final widgetUnderTest = EmailTileBuilder( + presentationEmail: PresentationEmail(), + selectAllMode: SelectMode.INACTIVE, + isShowingEmailContent: false, + ); + + // act + await tester.pumpWidget( + GetMaterialApp( + localizationsDelegates: const [ + AppLocalizationsDelegate(), + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate], + supportedLocales: LocalizationService.supportedLocales, + home: Scaffold(body: widgetUnderTest))); + await tester.pump(); + + // assert + expect( + find.byWidgetPredicate( + (widget) => widget is SvgPicture + && widget.bytesLoader is SvgAssetLoader + && (widget.bytesLoader as SvgAssetLoader).assetName == ImagePaths().icCheckboxUnselected + ), + findsNothing); + expect( + find.byWidgetPredicate( + (widget) => widget is InkWell + && widget.hoverColor == AppColor.colorEmailTileHoverWeb + ), + findsNothing); + }); + + testWidgets( + 'Should display icRead image ' + 'when app is running in desktop layout ' + 'and email is unread ' + 'and widget is hovered', + (tester) async { + // arrange + final widgetUnderTest = EmailTileBuilder( + presentationEmail: PresentationEmail(), + selectAllMode: SelectMode.INACTIVE, + isShowingEmailContent: false, + ); + debugDefaultTargetPlatformOverride = TargetPlatform.macOS; + final dpi = tester.view.devicePixelRatio; + tester.view.physicalSize = Size(dpi * 1920 * 2, dpi * 1080 * 2); + final gesture = await tester.createGesture(kind: PointerDeviceKind.mouse); + await gesture.addPointer(location: Offset.zero); + + // act + await tester.pumpWidget( + GetMaterialApp( + localizationsDelegates: const [ + AppLocalizationsDelegate(), + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate], + supportedLocales: LocalizationService.supportedLocales, + home: Scaffold(body: widgetUnderTest))); + await tester.pump(); + await gesture.moveTo(tester.getCenter(find.byType(EmailTileBuilder))); + await tester.pump(); + + // assert + expect( + find.byWidgetPredicate( + (widget) => widget is SvgPicture + && widget.bytesLoader is SvgAssetLoader + && (widget.bytesLoader as SvgAssetLoader).assetName == ImagePaths().icRead + ), + findsOneWidget); + + // clean up + debugDefaultTargetPlatformOverride = null; + tester.view.reset(); + gesture.removePointer(); + }); + + testWidgets( + 'Should display icUnread image ' + 'when app is running in desktop layout ' + 'and email is read ' + 'and widget is hovered', + (tester) async { + // arrange + final widgetUnderTest = EmailTileBuilder( + presentationEmail: PresentationEmail(keywords: {KeyWordIdentifier.emailSeen: true}), + selectAllMode: SelectMode.INACTIVE, + isShowingEmailContent: false, + ); + debugDefaultTargetPlatformOverride = TargetPlatform.macOS; + final dpi = tester.view.devicePixelRatio; + tester.view.physicalSize = Size(dpi * 1920 * 2, dpi * 1080 * 2); + final gesture = await tester.createGesture(kind: PointerDeviceKind.mouse); + await gesture.addPointer(location: Offset.zero); + + // act + await tester.pumpWidget( + GetMaterialApp( + localizationsDelegates: const [ + AppLocalizationsDelegate(), + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate], + supportedLocales: LocalizationService.supportedLocales, + home: Scaffold(body: widgetUnderTest))); + await tester.pump(); + await gesture.moveTo(tester.getCenter(find.byType(EmailTileBuilder))); + await tester.pump(); + + // assert + expect( + find.byWidgetPredicate( + (widget) => widget is SvgPicture + && widget.bytesLoader is SvgAssetLoader + && (widget.bytesLoader as SvgAssetLoader).assetName == ImagePaths().icUnread + ), + findsOneWidget); + + // clean up + debugDefaultTargetPlatformOverride = null; + tester.view.reset(); + gesture.removePointer(); + }); + }); +} \ No newline at end of file