Skip to content

Commit 4ea9b0f

Browse files
committed
autocomplete_test: Make setupToComposeInput accept narrow param
This will become handy for setting up a compose box in different types of narrows where compose box is supported.
1 parent c1ef7e9 commit 4ea9b0f

File tree

1 file changed

+45
-6
lines changed

1 file changed

+45
-6
lines changed

test/widgets/autocomplete_test.dart

+45-6
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ import 'test_app.dart';
3333
/// before the end of the test.
3434
Future<Finder> setupToComposeInput(WidgetTester tester, {
3535
List<User> users = const [],
36+
Narrow? narrow,
3637
}) async {
38+
assert(narrow is ChannelNarrow? || narrow is SendableNarrow?);
3739
TypingNotifier.debugEnable = false;
3840
addTearDown(TypingNotifier.debugReset);
3941

@@ -44,8 +46,20 @@ Future<Finder> setupToComposeInput(WidgetTester tester, {
4446
await store.addUsers(users);
4547
final connection = store.connection as FakeApiConnection;
4648

49+
narrow ??= DmNarrow(
50+
allRecipientIds: [eg.selfUser.userId, eg.otherUser.userId],
51+
selfUserId: eg.selfUser.userId);
4752
// 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+
}
4963
connection.prepare(json: GetMessagesResult(
5064
anchor: message.id,
5165
foundNewest: true,
@@ -58,19 +72,44 @@ Future<Finder> setupToComposeInput(WidgetTester tester, {
5872
prepareBoringImageHttpClient();
5973

6074
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)));
6476

6577
// global store, per-account store, and message list get loaded
6678
await tester.pumpAndSettle();
6779

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));
7082
check(finder.evaluate()).isNotEmpty();
7183
return finder;
7284
}
7385

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+
74113
/// Simulates loading a [MessageListPage] with a stream narrow
75114
/// and tapping to focus the topic input.
76115
///

0 commit comments

Comments
 (0)