@@ -35,6 +35,7 @@ import '../api/fake_api.dart';
3535import '../example_data.dart' as eg;
3636import '../flutter_checks.dart' ;
3737import '../model/binding.dart' ;
38+ import '../model/content_test.dart' ;
3839import '../model/message_list_test.dart' ;
3940import '../model/store_checks.dart' ;
4041import '../model/test_store.dart' ;
@@ -2413,6 +2414,57 @@ void main() {
24132414 testCancel (narrow: channelNarrow, start: _EditInteractionStart .restoreFailedEdit);
24142415 // testCancel(narrow: topicNarrow, start: _EditInteractionStart.restoreFailedEdit);
24152416 // testCancel(narrow: dmNarrow, start: _EditInteractionStart.restoreFailedEdit);
2417+
2418+ testWidgets ('if channel is unsubscribed, refresh on message-edit success' , (tester) async {
2419+ // Regression test for the "first buggy behavior"
2420+ // in https://github.com/zulip/zulip-flutter/issues/1798 .
2421+
2422+ final channel = eg.stream ();
2423+ final narrow = ChannelNarrow (channel.streamId);
2424+ final message = eg.streamMessage (stream: channel, sender: eg.selfUser);
2425+
2426+ await prepareComposeBox (tester, narrow: narrow, streams: [channel]);
2427+ await store.addMessages ([message]);
2428+ check (store.subscriptions[channel.streamId]).isNull ();
2429+ await tester.pump (); // message list updates
2430+
2431+ await startEditInteractionFromActionSheet (tester,
2432+ messageId: message.id, originalRawContent: 'foo' );
2433+ await tester.pump (Duration (seconds: 1 )); // fetch-raw-content request
2434+ checkContentInputValue (tester, 'foo' );
2435+
2436+ final newMarkdownContent = ContentExample .emojiUnicode.markdown! ;
2437+ await enterContent (tester, newMarkdownContent);
2438+
2439+ connection.prepare (json: UpdateMessageResult ().toJson (), delay: Duration (seconds: 1 ));
2440+ await tester.tap (find.widgetWithText (ZulipWebUiKitButton , 'Save' ));
2441+ await tester.pump (Duration (milliseconds: 500 ));
2442+ checkRequest (message.id, prevContent: 'foo' , content: newMarkdownContent);
2443+
2444+ final updatedMessage =
2445+ Message .fromJson (message.toJson ()..['content' ] = ContentExample .emojiUnicode.html);
2446+ connection.prepare (json: eg.newestGetMessagesResult (
2447+ foundOldest: true , messages: [updatedMessage]).toJson ());
2448+ await tester.pump (Duration (milliseconds: 500 ));
2449+ check (connection.lastRequest).isA< http.Request > ()
2450+ ..method.equals ('GET' )
2451+ ..url.path.equals ('/api/v1/messages' )
2452+ ..url.queryParameters.deepEquals ({
2453+ 'narrow' : jsonEncode (resolveApiNarrowForServer (
2454+ narrow.apiEncode (), connection.zulipFeatureLevel! )),
2455+ 'anchor' : '${message .id }' ,
2456+ 'num_before' : '100' ,
2457+ 'num_after' : '100' ,
2458+ 'allow_empty_topic_name' : 'true' ,
2459+ });
2460+ check (find.descendant (
2461+ of: find.byType (MessageWithPossibleSender ),
2462+ matching: find.text (ContentExample .emojiUnicode.expectedText! ))
2463+ ).findsOne ();
2464+ // TODO(#1798) The message actually appears in the "SAVING EDIT…" state
2465+ // (the "third buggy behavior" in #1798). We'll fix that soon,
2466+ // and it'll be convenient to test that here too.
2467+ });
24162468 });
24172469}
24182470
0 commit comments