@@ -33,7 +33,9 @@ import 'test_app.dart';
33
33
/// before the end of the test.
34
34
Future <Finder > setupToComposeInput (WidgetTester tester, {
35
35
List <User > users = const [],
36
+ Narrow ? narrow,
36
37
}) async {
38
+ assert (narrow is ChannelNarrow ? || narrow is SendableNarrow ? );
37
39
TypingNotifier .debugEnable = false ;
38
40
addTearDown (TypingNotifier .debugReset);
39
41
@@ -44,8 +46,20 @@ Future<Finder> setupToComposeInput(WidgetTester tester, {
44
46
await store.addUsers (users);
45
47
final connection = store.connection as FakeApiConnection ;
46
48
49
+ narrow ?? = DmNarrow (
50
+ allRecipientIds: [eg.selfUser.userId, eg.otherUser.userId],
51
+ selfUserId: eg.selfUser.userId);
47
52
// prepare message list data
48
- final message = eg.dmMessage (from: eg.selfUser, to: [eg.otherUser]);
53
+ final Message message;
54
+ switch (narrow) {
55
+ case DmNarrow ():
56
+ message = eg.dmMessage (from: eg.selfUser, to: [eg.otherUser]);
57
+ case ChannelNarrow (: final streamId) || TopicNarrow (: final streamId):
58
+ final stream = eg.stream (streamId: streamId);
59
+ message = eg.streamMessage (stream: stream);
60
+ await store.addStream (stream);
61
+ default : throw AssertionError (); // never happens because of the assert above
62
+ }
49
63
connection.prepare (json: GetMessagesResult (
50
64
anchor: message.id,
51
65
foundNewest: true ,
@@ -58,19 +72,44 @@ Future<Finder> setupToComposeInput(WidgetTester tester, {
58
72
prepareBoringImageHttpClient ();
59
73
60
74
await tester.pumpWidget (TestZulipApp (accountId: eg.selfAccount.id,
61
- child: MessageListPage (initNarrow: DmNarrow (
62
- allRecipientIds: [eg.selfUser.userId, eg.otherUser.userId],
63
- selfUserId: eg.selfUser.userId))));
75
+ child: MessageListPage (initNarrow: narrow)));
64
76
65
77
// global store, per-account store, and message list get loaded
66
78
await tester.pumpAndSettle ();
67
79
68
- // (hint text of compose input in a 1:1 DM)
69
- final finder = find. widgetWithText ( TextField , 'Message @${ eg . otherUser . fullName }' );
80
+ final finder = find. widgetWithText ( TextField ,
81
+ _composeInputHintTextFor (narrow, store : store) );
70
82
check (finder.evaluate ()).isNotEmpty ();
71
83
return finder;
72
84
}
73
85
86
+ String _composeInputHintTextFor (Narrow narrow, {required PerAccountStore store}) {
87
+ assert (narrow is ChannelNarrow || narrow is SendableNarrow );
88
+ final localizations = GlobalLocalizations .zulipLocalizations;
89
+ switch (narrow) {
90
+ case ChannelNarrow (: final streamId):
91
+ final streamName = store.streams[streamId]? .name
92
+ ?? localizations.composeBoxUnknownChannelName;
93
+ return localizations.composeBoxChannelContentHint (streamName, kNoTopicTopic);
94
+ case TopicNarrow (: final streamId, : final topic):
95
+ final streamName = store.streams[streamId]? .name
96
+ ?? localizations.composeBoxUnknownChannelName;
97
+ return localizations.composeBoxChannelContentHint (streamName, topic);
98
+ case DmNarrow (otherRecipientIds: []):
99
+ return localizations.composeBoxSelfDmContentHint;
100
+ case DmNarrow (otherRecipientIds: [final otherUserId]):
101
+ final fullName = store.users[otherUserId]? .fullName;
102
+ if (fullName == null ) return localizations.composeBoxGenericContentHint;
103
+ return localizations.composeBoxDmContentHint (fullName);
104
+ case DmNarrow ():
105
+ return localizations.composeBoxGroupDmContentHint;
106
+ case CombinedFeedNarrow ():
107
+ case MentionsNarrow ():
108
+ case StarredMessagesNarrow ():
109
+ throw AssertionError (); // never happens because of the assert above
110
+ }
111
+ }
112
+
74
113
/// Simulates loading a [MessageListPage] with a stream narrow
75
114
/// and tapping to focus the topic input.
76
115
///
0 commit comments