@@ -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/icons.dart' ;
20
21
import 'package:zulip/widgets/message_list.dart' ;
@@ -1009,4 +1010,84 @@ void main() {
1009
1010
});
1010
1011
});
1011
1012
});
1013
+
1014
+ group ('Update Narrow on message move' , () {
1015
+ final channel = eg.stream (name: 'move test stream' );
1016
+ final message = eg.streamMessage (stream: channel, content: 'Message to move' );
1017
+ final narrow = TopicNarrow .ofMessage (message);
1018
+
1019
+ void prepareGetMessageResponse (List <Message > messages) {
1020
+ connection.prepare (json: newestResult (
1021
+ foundOldest: false , messages: messages).toJson ());
1022
+ }
1023
+
1024
+ void handleMessageMoveEvent (List <Message > messages, String newTopic) {
1025
+ store.handleEvent (eg.updateMessageMoveEvent (messages,
1026
+ origTopic: messages[0 ].topic,
1027
+ newTopic: newTopic,
1028
+ propagateMode: PropagateMode .changeAll));
1029
+ }
1030
+
1031
+ testWidgets ('compose box send message after move' , (WidgetTester tester) async {
1032
+ await setupMessageListPage (tester, narrow: narrow, messages: [message], streams: [channel]);
1033
+
1034
+ final channelContentInputFinder = find.descendant (
1035
+ of: find.byType (ComposeAutocomplete ),
1036
+ matching: find.byType (TextField ));
1037
+
1038
+ await tester.enterText (channelContentInputFinder, 'Some text' );
1039
+ prepareGetMessageResponse ([message]);
1040
+ handleMessageMoveEvent ([message], 'new topic' );
1041
+ await tester.pump (const Duration (seconds: 1 ));
1042
+ check (tester.widget <TextField >(channelContentInputFinder))
1043
+ ..decoration.isNotNull ().hintText.equals ('Message #${channel .name } > new topic' )
1044
+ ..controller.isNotNull ().text.equals ('Some text' );
1045
+
1046
+ connection.prepare (json: SendMessageResult (id: 1 ).toJson ());
1047
+ await tester.tap (find.byIcon (Icons .send));
1048
+ await tester.pump ();
1049
+ check (connection.lastRequest).isA< http.Request > ()
1050
+ ..method.equals ('POST' )
1051
+ ..url.path.equals ('/api/v1/messages' )
1052
+ ..bodyFields.deepEquals ({
1053
+ 'type' : 'stream' ,
1054
+ 'to' : '${message .streamId }' ,
1055
+ 'topic' : 'new topic' ,
1056
+ 'content' : 'Some text' ,
1057
+ 'read_by_sender' : 'true' });
1058
+ await tester.pumpAndSettle ();
1059
+ });
1060
+
1061
+ testWidgets ('Move to narrow with existing messages' , (WidgetTester tester) async {
1062
+ await setupMessageListPage (tester, narrow: narrow, messages: [message], streams: [channel]);
1063
+ check (find.textContaining ('Existing message' ).evaluate ()).length.equals (0 );
1064
+ check (find.textContaining ('Message to move' ).evaluate ()).length.equals (1 );
1065
+
1066
+ final existingMessage = eg.streamMessage (
1067
+ stream: eg.stream (), topic: 'new topic' , content: 'Existing message' );
1068
+ prepareGetMessageResponse ([existingMessage, message]);
1069
+ handleMessageMoveEvent ([message], 'new topic' );
1070
+ await tester.pump (const Duration (seconds: 1 ));
1071
+
1072
+ check (find.textContaining ('Existing message' ).evaluate ()).length.equals (1 );
1073
+ check (find.textContaining ('Message to move' ).evaluate ()).length.equals (1 );
1074
+ });
1075
+
1076
+ testWidgets ('show new topic name in TopicNarrow after move' , (tester) async {
1077
+ await setupMessageListPage (tester, narrow: narrow, messages: [message], streams: [channel]);
1078
+
1079
+ prepareGetMessageResponse ([message]);
1080
+ handleMessageMoveEvent ([message], 'new topic' );
1081
+ await tester.pump (const Duration (seconds: 1 ));
1082
+
1083
+ check (find.descendant (
1084
+ of: find.byType (RecipientHeader ),
1085
+ matching: find.text ('new topic' )).evaluate ()
1086
+ ).length.equals (1 );
1087
+ check (find.descendant (
1088
+ of: find.byType (MessageListAppBarTitle ),
1089
+ matching: find.text ('${channel .name } > new topic' )).evaluate ()
1090
+ ).length.equals (1 );
1091
+ });
1092
+ });
1012
1093
}
0 commit comments