@@ -15,6 +15,7 @@ import 'package:zulip/api/route/messages.dart';
15
15
import 'package:zulip/model/localizations.dart' ;
16
16
import 'package:zulip/model/narrow.dart' ;
17
17
import 'package:zulip/model/store.dart' ;
18
+ import 'package:zulip/widgets/autocomplete.dart' ;
18
19
import 'package:zulip/widgets/content.dart' ;
19
20
import 'package:zulip/widgets/emoji_reaction.dart' ;
20
21
import 'package:zulip/widgets/icons.dart' ;
@@ -981,4 +982,84 @@ void main() {
981
982
});
982
983
});
983
984
});
985
+
986
+ group ('Update Narrow on message move' , () {
987
+ final channel = eg.stream (name: 'move test stream' );
988
+ final message = eg.streamMessage (stream: channel, content: 'Message to move' );
989
+ final narrow = TopicNarrow .ofMessage (message);
990
+
991
+ void prepareGetMessageResponse (List <Message > messages) {
992
+ connection.prepare (json: newestResult (
993
+ foundOldest: false , messages: messages).toJson ());
994
+ }
995
+
996
+ void handleMessageMoveEvent (List <Message > messages, String newTopic) {
997
+ store.handleEvent (eg.updateMessageMoveEvent (messages,
998
+ origTopic: messages[0 ].topic,
999
+ newTopic: newTopic,
1000
+ propagateMode: PropagateMode .changeAll));
1001
+ }
1002
+
1003
+ testWidgets ('compose box send message after move' , (WidgetTester tester) async {
1004
+ await setupMessageListPage (tester, narrow: narrow, messages: [message], streams: [channel]);
1005
+
1006
+ final channelContentInputFinder = find.descendant (
1007
+ of: find.byType (ComposeAutocomplete ),
1008
+ matching: find.byType (TextField ));
1009
+
1010
+ await tester.enterText (channelContentInputFinder, 'Some text' );
1011
+ prepareGetMessageResponse ([message]);
1012
+ handleMessageMoveEvent ([message], 'new topic' );
1013
+ await tester.pump (const Duration (seconds: 1 ));
1014
+ check (tester.widget <TextField >(channelContentInputFinder))
1015
+ ..decoration.isNotNull ().hintText.equals ('Message #${channel .name } > new topic' )
1016
+ ..controller.isNotNull ().text.equals ('Some text' );
1017
+
1018
+ connection.prepare (json: SendMessageResult (id: 1 ).toJson ());
1019
+ await tester.tap (find.byIcon (Icons .send));
1020
+ await tester.pump ();
1021
+ check (connection.lastRequest).isA< http.Request > ()
1022
+ ..method.equals ('POST' )
1023
+ ..url.path.equals ('/api/v1/messages' )
1024
+ ..bodyFields.deepEquals ({
1025
+ 'type' : 'stream' ,
1026
+ 'to' : '${message .streamId }' ,
1027
+ 'topic' : 'new topic' ,
1028
+ 'content' : 'Some text' ,
1029
+ 'read_by_sender' : 'true' });
1030
+ await tester.pumpAndSettle ();
1031
+ });
1032
+
1033
+ testWidgets ('Move to narrow with existing messages' , (WidgetTester tester) async {
1034
+ await setupMessageListPage (tester, narrow: narrow, messages: [message], streams: [channel]);
1035
+ check (find.textContaining ('Existing message' ).evaluate ()).length.equals (0 );
1036
+ check (find.textContaining ('Message to move' ).evaluate ()).length.equals (1 );
1037
+
1038
+ final existingMessage = eg.streamMessage (
1039
+ stream: eg.stream (), topic: 'new topic' , content: 'Existing message' );
1040
+ prepareGetMessageResponse ([existingMessage, message]);
1041
+ handleMessageMoveEvent ([message], 'new topic' );
1042
+ await tester.pump (const Duration (seconds: 1 ));
1043
+
1044
+ check (find.textContaining ('Existing message' ).evaluate ()).length.equals (1 );
1045
+ check (find.textContaining ('Message to move' ).evaluate ()).length.equals (1 );
1046
+ });
1047
+
1048
+ testWidgets ('show new topic name in TopicNarrow after move' , (tester) async {
1049
+ await setupMessageListPage (tester, narrow: narrow, messages: [message], streams: [channel]);
1050
+
1051
+ prepareGetMessageResponse ([message]);
1052
+ handleMessageMoveEvent ([message], 'new topic' );
1053
+ await tester.pump (const Duration (seconds: 1 ));
1054
+
1055
+ check (find.descendant (
1056
+ of: find.byType (RecipientHeader ),
1057
+ matching: find.text ('new topic' )).evaluate ()
1058
+ ).length.equals (1 );
1059
+ check (find.descendant (
1060
+ of: find.byType (MessageListAppBarTitle ),
1061
+ matching: find.text ('${channel .name } > new topic' )).evaluate ()
1062
+ ).length.equals (1 );
1063
+ });
1064
+ });
984
1065
}
0 commit comments