@@ -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,24 @@ 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):
58
+ final stream = eg.stream (streamId: streamId);
59
+ message = eg.streamMessage (stream: stream);
60
+ await store.addStream (stream);
61
+ case TopicNarrow (: final streamId, : final topic):
62
+ final stream = eg.stream (streamId: streamId);
63
+ message = eg.streamMessage (stream: stream, topic: topic);
64
+ await store.addStream (stream);
65
+ default : throw StateError ('unexpected narrow type' );
66
+ }
49
67
connection.prepare (json: GetMessagesResult (
50
68
anchor: message.id,
51
69
foundNewest: true ,
@@ -58,19 +76,44 @@ Future<Finder> setupToComposeInput(WidgetTester tester, {
58
76
prepareBoringImageHttpClient ();
59
77
60
78
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))));
79
+ child: MessageListPage (initNarrow: narrow)));
64
80
65
81
// global store, per-account store, and message list get loaded
66
82
await tester.pumpAndSettle ();
67
83
68
- // (hint text of compose input in a 1:1 DM)
69
- final finder = find. widgetWithText ( TextField , 'Message @${ eg . otherUser . fullName }' );
84
+ final finder = find. widgetWithText ( TextField ,
85
+ _composeInputHintTextFor (narrow, store : store) );
70
86
check (finder.evaluate ()).isNotEmpty ();
71
87
return finder;
72
88
}
73
89
90
+ String _composeInputHintTextFor (Narrow narrow, {required PerAccountStore store}) {
91
+ assert (narrow is ChannelNarrow || narrow is SendableNarrow );
92
+ final localizations = GlobalLocalizations .zulipLocalizations;
93
+ switch (narrow) {
94
+ case ChannelNarrow (: final streamId):
95
+ final streamName = store.streams[streamId]? .name
96
+ ?? localizations.composeBoxUnknownChannelName;
97
+ return localizations.composeBoxChannelContentHint (streamName, kNoTopicTopic);
98
+ case TopicNarrow (: final streamId, : final topic):
99
+ final streamName = store.streams[streamId]? .name
100
+ ?? localizations.composeBoxUnknownChannelName;
101
+ return localizations.composeBoxChannelContentHint (streamName, topic);
102
+ case DmNarrow (otherRecipientIds: []):
103
+ return localizations.composeBoxSelfDmContentHint;
104
+ case DmNarrow (otherRecipientIds: [final otherUserId]):
105
+ final fullName = store.users[otherUserId]? .fullName;
106
+ if (fullName == null ) return localizations.composeBoxGenericContentHint;
107
+ return localizations.composeBoxDmContentHint (fullName);
108
+ case DmNarrow ():
109
+ return localizations.composeBoxGroupDmContentHint;
110
+ case CombinedFeedNarrow ():
111
+ case MentionsNarrow ():
112
+ case StarredMessagesNarrow ():
113
+ throw StateError ('unexpected narrow type' );
114
+ }
115
+ }
116
+
74
117
/// Simulates loading a [MessageListPage] with a stream narrow
75
118
/// and tapping to focus the topic input.
76
119
///
0 commit comments