TF-2976 Add widget test for EmailTileBuilder for web

This commit is contained in:
DatDang
2024-07-22 11:41:42 +07:00
committed by Dat H. Pham
parent eb878e421e
commit b1c747f3ef
@@ -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();
});
});
}