From 87f41fc4ea7363d63fa5a3f7e638b002ce7059c4 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 27 Mar 2024 00:06:53 +0700 Subject: [PATCH] TF-2717 Write widget test for multiple recipients when focus and unfocus --- .../widgets/recipient_tag_item_widget.dart | 1 + .../recipient_composer_widget_test.dart | 98 ++++++++++++++++++- 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/lib/features/composer/presentation/widgets/recipient_tag_item_widget.dart b/lib/features/composer/presentation/widgets/recipient_tag_item_widget.dart index d7867b281..cc46781e2 100644 --- a/lib/features/composer/presentation/widgets/recipient_tag_item_widget.dart +++ b/lib/features/composer/presentation/widgets/recipient_tag_item_widget.dart @@ -157,6 +157,7 @@ class RecipientTagItemWidget extends StatelessWidget { ), if (isCollapsed) TMailButtonWidget.fromText( + key: Key('counter_recipient_tag_item_${prefix.name}_$index'), margin: _counterMargin, text: '+$countRecipients', onTapActionCallback: () => onShowFullAction?.call(prefix), diff --git a/test/features/features/composer/recipient_composer_widget_test.dart b/test/features/features/composer/recipient_composer_widget_test.dart index 87bea4e2f..d0cd27273 100644 --- a/test/features/features/composer/recipient_composer_widget_test.dart +++ b/test/features/features/composer/recipient_composer_widget_test.dart @@ -6,6 +6,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/email/prefix_email_address.dart'; +import 'package:model/mailbox/expand_mode.dart'; import 'package:super_tag_editor/tag_editor.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_tag_item_widget.dart'; @@ -170,7 +171,7 @@ void main() { final recipientTagItemWidgetFinder = find.byKey(Key('recipient_tag_item_${prefix.name}_0')); final Size prefixRecipientComposerWidgetSize = tester.getSize(prefixRecipientComposerWidgetFinder); - final Size recipientTagItemWidgetSize = tester.getSize(prefixRecipientComposerWidgetFinder); + final Size recipientTagItemWidgetSize = tester.getSize(recipientTagItemWidgetFinder); log('recipient_composer_widget_test::main: PrefixLabelSize = $prefixRecipientComposerWidgetSize | TagSize = $recipientTagItemWidgetSize'); @@ -212,6 +213,7 @@ void main() { log('recipient_composer_widget_test::main: TagSize = $recipientTagItemWidgetSize | LabelTagSize = $labelRecipientTagItemWidgetSize | DeleteIconTagSize = $deleteIconRecipientTagItemWidgetSize'); + expect(recipientTagItemWidgetFinder, findsOneWidget); expect(labelRecipientTagItemWidgetFinder, findsOneWidget); expect(deleteIconRecipientTagItemWidgetFinder, findsOneWidget); @@ -262,5 +264,99 @@ void main() { lessThanOrEqualTo(recipientTagItemWidgetSize.width) ); }); + + testWidgets('WHEN To has multiple recipients AND expandMode is COLLAPSE\n' + 'RecipientTagItemWidget should have all the components (AvatarIcon, Label, DeleteIcon, CounterTag)', (tester) async { + final listEmailAddress = [ + EmailAddress('test1', 'test1@example.com'), + EmailAddress('test2', 'test2@example.com'), + ]; + + final widget = makeTestableWidget( + child: RecipientComposerWidget( + prefix: prefix, + listEmailAddress: listEmailAddress, + imagePaths: imagePaths, + maxWidth: 360, + expandMode: ExpandMode.COLLAPSE, + keyTagEditor: keyEmailTagEditor, + ), + ); + + await tester.pumpWidget(widget); + + await tester.pumpAndSettle(); + + final prefixRecipientComposerWidgetFinder = find.byKey(Key('prefix_${prefix.name}_recipient_composer_widget')); + final recipientTagItemWidgetFinder = find.byKey(Key('recipient_tag_item_${prefix.name}_0')); + + final Size prefixRecipientComposerWidgetSize = tester.getSize(prefixRecipientComposerWidgetFinder); + final Size recipientTagItemWidgetSize = tester.getSize(recipientTagItemWidgetFinder); + + log('recipient_composer_widget_test::main: PrefixLabelSize = $prefixRecipientComposerWidgetSize | TagSize = $recipientTagItemWidgetSize'); + + expect(prefixRecipientComposerWidgetFinder, findsOneWidget); + expect(recipientTagItemWidgetFinder, findsOneWidget); + expect( + prefixRecipientComposerWidgetSize.width + recipientTagItemWidgetSize.width, + lessThanOrEqualTo(360) + ); + + final labelRecipientTagItemWidgetFinder = find.byKey(Key('label_recipient_tag_item_${prefix.name}_0')); + final deleteIconRecipientTagItemWidgetFinder = find.byKey(Key('delete_icon_recipient_tag_item_${prefix.name}_0')); + final avatarIconRecipientTagItemWidgetFinder = find.byKey(Key('avatar_icon_recipient_tag_item_${prefix.name}_0')); + final counterRecipientTagItemWidgetFinder = find.byKey(Key('counter_recipient_tag_item_${prefix.name}_0')); + + final Size labelRecipientTagItemWidgetSize = tester.getSize(labelRecipientTagItemWidgetFinder); + final Size deleteIconRecipientTagItemWidgetSize = tester.getSize(deleteIconRecipientTagItemWidgetFinder); + final Size avatarIconRecipientTagItemWidgetSize = tester.getSize(avatarIconRecipientTagItemWidgetFinder); + final Size counterRecipientTagItemWidgetSize = tester.getSize(counterRecipientTagItemWidgetFinder); + + log('recipient_composer_widget_test::main: LabelTagSize = $labelRecipientTagItemWidgetSize | DeleteIconTagSize = $deleteIconRecipientTagItemWidgetSize | AvatarIconTagSize = $avatarIconRecipientTagItemWidgetSize | CounterTagSize = $counterRecipientTagItemWidgetSize'); + + expect(labelRecipientTagItemWidgetFinder, findsOneWidget); + expect(deleteIconRecipientTagItemWidgetFinder, findsOneWidget); + expect(avatarIconRecipientTagItemWidgetFinder, findsOneWidget); + expect(counterRecipientTagItemWidgetFinder, findsOneWidget); + + final totalSizeOfAllComponents = labelRecipientTagItemWidgetSize.width + + deleteIconRecipientTagItemWidgetSize.width + + avatarIconRecipientTagItemWidgetSize.width; + counterRecipientTagItemWidgetSize.width; + + expect( + totalSizeOfAllComponents, + lessThanOrEqualTo(recipientTagItemWidgetSize.width) + ); + }); + + testWidgets('WHEN To has multiple recipients AND expandMode is EXPAND\n' + 'RecipientTagItemWidget should have all the components (AvatarIcon, Label, DeleteIcon)', (tester) async { + final listEmailAddress = [ + EmailAddress('test1', 'test1@example.com'), + EmailAddress('test2', 'test2@example.com'), + ]; + + final widget = makeTestableWidget( + child: RecipientComposerWidget( + prefix: prefix, + listEmailAddress: listEmailAddress, + imagePaths: imagePaths, + maxWidth: 360, + expandMode: ExpandMode.EXPAND, + keyTagEditor: keyEmailTagEditor, + ), + ); + + await tester.pumpWidget(widget); + + await tester.pumpAndSettle(); + + final prefixRecipientComposerWidgetFinder = find.byKey(Key('prefix_${prefix.name}_recipient_composer_widget')); + final recipientTagItemWidgetFinder = find.byType(RecipientTagItemWidget); + + expect(prefixRecipientComposerWidgetFinder, findsOneWidget); + expect(recipientTagItemWidgetFinder, findsNWidgets(2)); + }); }); }