@@ -52,6 +52,8 @@ late FakeApiConnection connection;
5252Future <void > setupToMessageActionSheet (WidgetTester tester, {
5353 required Message message,
5454 required Narrow narrow,
55+ bool shouldSetServerEmojiData = true ,
56+ bool useLegacyServerEmojiData = false ,
5557}) async {
5658 addTearDown (testBinding.reset);
5759 assert (narrow.containsMessage (message));
@@ -70,7 +72,11 @@ Future<void> setupToMessageActionSheet(WidgetTester tester, {
7072 await store.addSubscription (eg.subscription (stream));
7173 }
7274 connection = store.connection as FakeApiConnection ;
73- store.setServerEmojiData (eg.serverEmojiDataPopular);
75+ if (shouldSetServerEmojiData) {
76+ store.setServerEmojiData (useLegacyServerEmojiData
77+ ? eg.serverEmojiDataPopular
78+ : eg.serverEmojiDataPopularModern);
79+ }
7480
7581 connection.prepare (json: eg.newestGetMessagesResult (
7682 foundOldest: true , messages: [message]).toJson ());
@@ -811,74 +817,96 @@ void main() {
811817
812818 group ('message action sheet' , () {
813819 group ('ReactionButtons' , () {
814- final popularCandidates =
815- (eg.store ()..setServerEmojiData (eg.serverEmojiDataPopular))
816- .popularEmojiCandidates ();
817-
818- for (final emoji in popularCandidates) {
819- final emojiDisplay = emoji.emojiDisplay as UnicodeEmojiDisplay ;
820-
821- Future <void > tapButton (WidgetTester tester) async {
822- await tester.tap (find.descendant (
823- of: find.byType (BottomSheet ),
824- matching: find.text (emojiDisplay.emojiUnicode)));
825- }
826-
827- testWidgets ('${emoji .emojiName } adding success' , (tester) async {
828- final message = eg.streamMessage ();
829- await setupToMessageActionSheet (tester, message: message, narrow: TopicNarrow .ofMessage (message));
830-
831- connection.prepare (json: {});
832- await tapButton (tester);
833- await tester.pump (Duration .zero);
834-
835- check (connection.lastRequest).isA< http.Request > ()
836- ..method.equals ('POST' )
837- ..url.path.equals ('/api/v1/messages/${message .id }/reactions' )
838- ..bodyFields.deepEquals ({
839- 'reaction_type' : 'unicode_emoji' ,
840- 'emoji_code' : emoji.emojiCode,
841- 'emoji_name' : emoji.emojiName,
842- });
843- });
844-
845- testWidgets ('${emoji .emojiName } removing success' , (tester) async {
846- final message = eg.streamMessage (
847- reactions: [Reaction (
848- emojiName: emoji.emojiName,
849- emojiCode: emoji.emojiCode,
850- reactionType: ReactionType .unicodeEmoji,
851- userId: eg.selfAccount.userId)]
852- );
853- await setupToMessageActionSheet (tester, message: message, narrow: TopicNarrow .ofMessage (message));
854-
855- connection.prepare (json: {});
856- await tapButton (tester);
857- await tester.pump (Duration .zero);
858-
859- check (connection.lastRequest).isA< http.Request > ()
860- ..method.equals ('DELETE' )
861- ..url.path.equals ('/api/v1/messages/${message .id }/reactions' )
862- ..bodyFields.deepEquals ({
863- 'reaction_type' : 'unicode_emoji' ,
864- 'emoji_code' : emoji.emojiCode,
865- 'emoji_name' : emoji.emojiName,
866- });
867- });
820+ testWidgets ('absent if ServerEmojiData not loaded' , (tester) async {
821+ final message = eg.streamMessage ();
822+ await setupToMessageActionSheet (tester,
823+ message: message,
824+ narrow: TopicNarrow .ofMessage (message),
825+ shouldSetServerEmojiData: false );
826+ check (find.byType (ReactionButtons )).findsNothing ();
827+ });
868828
869- testWidgets ('${emoji .emojiName } request has an error' , (tester) async {
870- final message = eg.streamMessage ();
871- await setupToMessageActionSheet (tester, message: message, narrow: TopicNarrow .ofMessage (message));
829+ for (final useLegacy in [false , true ]) {
830+ final popularCandidates =
831+ (eg.store ()..setServerEmojiData (
832+ useLegacy
833+ ? eg.serverEmojiDataPopular
834+ : eg.serverEmojiDataPopularModern))
835+ .popularEmojiCandidates ();
836+ for (final emoji in popularCandidates) {
837+ final emojiDisplay = emoji.emojiDisplay as UnicodeEmojiDisplay ;
838+
839+ Future <void > tapButton (WidgetTester tester) async {
840+ await tester.tap (find.descendant (
841+ of: find.byType (BottomSheet ),
842+ matching: find.text (emojiDisplay.emojiUnicode)));
843+ }
844+
845+ testWidgets ('${emoji .emojiName } adding success; useLegacy: $useLegacy ' , (tester) async {
846+ final message = eg.streamMessage ();
847+ await setupToMessageActionSheet (tester,
848+ message: message,
849+ narrow: TopicNarrow .ofMessage (message),
850+ useLegacyServerEmojiData: useLegacy);
851+
852+ connection.prepare (json: {});
853+ await tapButton (tester);
854+ await tester.pump (Duration .zero);
855+
856+ check (connection.lastRequest).isA< http.Request > ()
857+ ..method.equals ('POST' )
858+ ..url.path.equals ('/api/v1/messages/${message .id }/reactions' )
859+ ..bodyFields.deepEquals ({
860+ 'reaction_type' : 'unicode_emoji' ,
861+ 'emoji_code' : emoji.emojiCode,
862+ 'emoji_name' : emoji.emojiName,
863+ });
864+ });
872865
873- connection.prepare (
874- apiException: eg.apiBadRequest (message: 'Invalid message(s)' ));
875- await tapButton (tester);
876- await tester.pump (Duration .zero); // error arrives; error dialog shows
866+ testWidgets ('${emoji .emojiName } removing success; useLegacy: $useLegacy ' , (tester) async {
867+ final message = eg.streamMessage (
868+ reactions: [Reaction (
869+ emojiName: emoji.emojiName,
870+ emojiCode: emoji.emojiCode,
871+ reactionType: ReactionType .unicodeEmoji,
872+ userId: eg.selfAccount.userId)]
873+ );
874+ await setupToMessageActionSheet (tester,
875+ message: message,
876+ narrow: TopicNarrow .ofMessage (message),
877+ useLegacyServerEmojiData: useLegacy);
878+
879+ connection.prepare (json: {});
880+ await tapButton (tester);
881+ await tester.pump (Duration .zero);
882+
883+ check (connection.lastRequest).isA< http.Request > ()
884+ ..method.equals ('DELETE' )
885+ ..url.path.equals ('/api/v1/messages/${message .id }/reactions' )
886+ ..bodyFields.deepEquals ({
887+ 'reaction_type' : 'unicode_emoji' ,
888+ 'emoji_code' : emoji.emojiCode,
889+ 'emoji_name' : emoji.emojiName,
890+ });
891+ });
877892
878- await tester.tap (find.byWidget (checkErrorDialog (tester,
879- expectedTitle: 'Adding reaction failed' ,
880- expectedMessage: 'Invalid message(s)' )));
881- });
893+ testWidgets ('${emoji .emojiName } request has an error; useLegacy: $useLegacy ' , (tester) async {
894+ final message = eg.streamMessage ();
895+ await setupToMessageActionSheet (tester,
896+ message: message,
897+ narrow: TopicNarrow .ofMessage (message),
898+ useLegacyServerEmojiData: useLegacy);
899+
900+ connection.prepare (
901+ apiException: eg.apiBadRequest (message: 'Invalid message(s)' ));
902+ await tapButton (tester);
903+ await tester.pump (Duration .zero); // error arrives; error dialog shows
904+
905+ await tester.tap (find.byWidget (checkErrorDialog (tester,
906+ expectedTitle: 'Adding reaction failed' ,
907+ expectedMessage: 'Invalid message(s)' )));
908+ });
909+ }
882910 }
883911 });
884912
0 commit comments