@@ -41,6 +41,7 @@ import '../api/fake_api.dart';
4141import '../api/model/model_checks.dart' ;
4242import '../example_data.dart' as eg;
4343import '../flutter_checks.dart' ;
44+ import '../model/autocomplete_checks.dart' ;
4445import '../model/binding.dart' ;
4546import '../model/content_test.dart' ;
4647import '../model/test_store.dart' ;
@@ -1674,8 +1675,33 @@ void main() {
16741675 check (contentController).not ((it) => it.validationErrors.contains (ContentValidationError .quoteAndReplyInProgress));
16751676 }
16761677
1677- testWidgets ('in channel narrow' , (tester) async {
1678- final message = eg.streamMessage ();
1678+ testWidgets ('in channel narrow with different, non-vacuous topic' , (tester) async {
1679+ final message = eg.streamMessage (topic: 'some topic' );
1680+ await setupToMessageActionSheet (tester, message: message, narrow: ChannelNarrow (message.streamId));
1681+
1682+ final composeBoxController = findComposeBoxController (tester) as StreamComposeBoxController ;
1683+ final contentController = composeBoxController.content;
1684+
1685+ // Ensure channel-topics are loaded before testing quote & reply behavior
1686+ connection.prepare (body:
1687+ jsonEncode (GetStreamTopicsResult (topics: [eg.getStreamTopicsEntry ()]).toJson ()));
1688+ final topicController = composeBoxController.topic;
1689+ topicController.value = TextEditingValue (text: 'other topic' );
1690+
1691+ final valueBefore = contentController.value;
1692+ prepareRawContentResponseSuccess (message: message, rawContent: 'Hello world' );
1693+ await tapQuoteAndReplyButton (tester);
1694+ checkLoadingState (store, contentController, valueBefore: valueBefore, message: message);
1695+ await tester.pump (Duration .zero); // message is fetched; compose box updates
1696+ check (composeBoxController.contentFocusNode.hasFocus).isTrue ();
1697+ checkSuccessState (store, contentController,
1698+ valueBefore: valueBefore, message: message, rawContent: 'Hello world' );
1699+ check (topicController).textNormalized.equals ('other topic' );
1700+ });
1701+
1702+ testWidgets ('in channel narrow with empty topic' , (tester) async {
1703+ // Regression test for https://github.com/zulip/zulip-flutter/issues/1469
1704+ final message = eg.streamMessage (topic: 'some topic' );
16791705 await setupToMessageActionSheet (tester, message: message, narrow: ChannelNarrow (message.streamId));
16801706
16811707 final composeBoxController = findComposeBoxController (tester) as StreamComposeBoxController ;
@@ -1685,7 +1711,7 @@ void main() {
16851711 connection.prepare (body:
16861712 jsonEncode (GetStreamTopicsResult (topics: [eg.getStreamTopicsEntry ()]).toJson ()));
16871713 final topicController = composeBoxController.topic;
1688- topicController.value = const TextEditingValue (text: kNoTopicTopic );
1714+ topicController.value = const TextEditingValue (text: '' );
16891715
16901716 final valueBefore = contentController.value;
16911717 prepareRawContentResponseSuccess (message: message, rawContent: 'Hello world' );
@@ -1695,6 +1721,7 @@ void main() {
16951721 check (composeBoxController.contentFocusNode.hasFocus).isTrue ();
16961722 checkSuccessState (store, contentController,
16971723 valueBefore: valueBefore, message: message, rawContent: 'Hello world' );
1724+ check (topicController).textNormalized.equals ('some topic' );
16981725 });
16991726
17001727 group ('in topic narrow' , () {
0 commit comments