From 7320f18f70d22a39a9735fb9c73c440b9e14cff7 Mon Sep 17 00:00:00 2001 From: Khader M Khudair Date: Sun, 28 Jul 2024 07:31:17 +0300 Subject: [PATCH 1/2] api [nfc]: Rename `StreamMessage` to `ChannelMessage` Fixes parts of #631 --- lib/api/model/model.dart | 12 ++++++------ lib/api/model/model.g.dart | 6 +++--- lib/model/message_list.dart | 10 +++++----- lib/model/narrow.dart | 8 ++++---- lib/model/recent_senders.dart | 10 +++++----- lib/model/unreads.dart | 2 +- lib/widgets/action_sheet.dart | 2 +- lib/widgets/message_list.dart | 4 ++-- test/example_data.dart | 12 ++++++------ test/model/message_list_test.dart | 2 +- test/model/recent_senders_test.dart | 6 +++--- test/model/unreads_test.dart | 4 ++-- test/widgets/action_sheet_test.dart | 2 +- test/widgets/inbox_test.dart | 6 +++--- test/widgets/message_list_test.dart | 2 +- 15 files changed, 44 insertions(+), 44 deletions(-) diff --git a/lib/api/model/model.dart b/lib/api/model/model.dart index b5abdf7905..dfad0c2d1d 100644 --- a/lib/api/model/model.dart +++ b/lib/api/model/model.dart @@ -536,7 +536,7 @@ sealed class Message { factory Message.fromJson(Map json) { final type = json['type'] as String; - if (type == 'stream') return StreamMessage.fromJson(json); + if (type == 'stream') return ChannelMessage.fromJson(json); if (type == 'private') return DmMessage.fromJson(json); throw Exception("Message.fromJson: unexpected message type $type"); } @@ -571,7 +571,7 @@ enum MessageFlag { } @JsonSerializable(fieldRename: FieldRename.snake) -class StreamMessage extends Message { +class ChannelMessage extends Message { @override @JsonKey(includeToJson: true) String get type => 'stream'; @@ -579,7 +579,7 @@ class StreamMessage extends Message { final String displayRecipient; final int streamId; - StreamMessage({ + ChannelMessage({ required super.client, required super.content, required super.contentType, @@ -602,11 +602,11 @@ class StreamMessage extends Message { required this.streamId, }); - factory StreamMessage.fromJson(Map json) => - _$StreamMessageFromJson(json); + factory ChannelMessage.fromJson(Map json) => + _$ChannelMessageFromJson(json); @override - Map toJson() => _$StreamMessageToJson(this); + Map toJson() => _$ChannelMessageToJson(this); } @JsonSerializable(fieldRename: FieldRename.snake) diff --git a/lib/api/model/model.g.dart b/lib/api/model/model.g.dart index 456107ab85..308409b89f 100644 --- a/lib/api/model/model.g.dart +++ b/lib/api/model/model.g.dart @@ -260,8 +260,8 @@ Map _$SubscriptionToJson(Subscription instance) => 'color': instance.color, }; -StreamMessage _$StreamMessageFromJson(Map json) => - StreamMessage( +ChannelMessage _$ChannelMessageFromJson(Map json) => + ChannelMessage( client: json['client'] as String, content: json['content'] as String, contentType: json['content_type'] as String, @@ -285,7 +285,7 @@ StreamMessage _$StreamMessageFromJson(Map json) => streamId: (json['stream_id'] as num).toInt(), ); -Map _$StreamMessageToJson(StreamMessage instance) => +Map _$ChannelMessageToJson(ChannelMessage instance) => { 'client': instance.client, 'content': instance.content, diff --git a/lib/model/message_list.dart b/lib/model/message_list.dart index 83fd512391..afba34ec3b 100644 --- a/lib/model/message_list.dart +++ b/lib/model/message_list.dart @@ -266,7 +266,7 @@ mixin _MessageSequence { @visibleForTesting bool haveSameRecipient(Message prevMessage, Message message) { - if (prevMessage is StreamMessage && message is StreamMessage) { + if (prevMessage is ChannelMessage && message is ChannelMessage) { if (prevMessage.streamId != message.streamId) return false; if (prevMessage.topic != message.topic) return false; } else if (prevMessage is DmMessage && message is DmMessage) { @@ -279,7 +279,7 @@ bool haveSameRecipient(Message prevMessage, Message message) { return true; // switch ((prevMessage, message)) { - // case (StreamMessage(), StreamMessage()): + // case (ChannelMessage(), ChannelMessage()): // // TODO(dart-3): this doesn't type-narrow prevMessage and message // case (DmMessage(), DmMessage()): // // … @@ -358,14 +358,14 @@ class MessageListView with ChangeNotifier, _MessageSequence { switch (narrow) { case CombinedFeedNarrow(): return switch (message) { - StreamMessage() => + ChannelMessage() => store.isTopicVisible(message.streamId, message.topic), DmMessage() => true, }; case ChannelNarrow(:final streamId): - assert(message is StreamMessage && message.streamId == streamId); - if (message is! StreamMessage) return false; + assert(message is ChannelMessage && message.streamId == streamId); + if (message is! ChannelMessage) return false; return store.isTopicVisibleInStream(streamId, message.topic); case TopicNarrow(): diff --git a/lib/model/narrow.dart b/lib/model/narrow.dart index a23caa40b9..2e14d6ae1b 100644 --- a/lib/model/narrow.dart +++ b/lib/model/narrow.dart @@ -29,7 +29,7 @@ sealed class Narrow { sealed class SendableNarrow extends Narrow { factory SendableNarrow.ofMessage(Message message, {required int selfUserId}) { switch (message) { - case StreamMessage(): + case ChannelMessage(): return TopicNarrow.ofMessage(message); case DmMessage(): return DmNarrow.ofMessage(message, selfUserId: selfUserId); @@ -72,7 +72,7 @@ class ChannelNarrow extends Narrow { @override bool containsMessage(Message message) { - return message is StreamMessage && message.streamId == streamId; + return message is ChannelMessage && message.streamId == streamId; } @override @@ -94,7 +94,7 @@ class ChannelNarrow extends Narrow { class TopicNarrow extends Narrow implements SendableNarrow { const TopicNarrow(this.streamId, this.topic); - factory TopicNarrow.ofMessage(StreamMessage message) { + factory TopicNarrow.ofMessage(ChannelMessage message) { return TopicNarrow(message.streamId, message.topic); } @@ -103,7 +103,7 @@ class TopicNarrow extends Narrow implements SendableNarrow { @override bool containsMessage(Message message) { - return (message is StreamMessage + return (message is ChannelMessage && message.streamId == streamId && message.topic == topic); } diff --git a/lib/model/recent_senders.dart b/lib/model/recent_senders.dart index d075d05eee..b67d888cc5 100644 --- a/lib/model/recent_senders.dart +++ b/lib/model/recent_senders.dart @@ -40,8 +40,8 @@ class RecentSenders { final messagesByUserInStream = <(int, int), QueueList>{}; final messagesByUserInTopic = <(int, String, int), QueueList>{}; for (final message in messages) { - if (message is! StreamMessage) continue; - final StreamMessage(:streamId, :topic, :senderId, id: int messageId) = message; + if (message is! ChannelMessage) continue; + final ChannelMessage(:streamId, :topic, :senderId, id: int messageId) = message; (messagesByUserInStream[(streamId, senderId)] ??= QueueList()).add(messageId); (messagesByUserInTopic[(streamId, topic, senderId)] ??= QueueList()).add(messageId); } @@ -60,8 +60,8 @@ class RecentSenders { /// Records the necessary data from a new message. void handleMessage(Message message) { - if (message is! StreamMessage) return; - final StreamMessage(:streamId, :topic, :senderId, id: int messageId) = message; + if (message is! ChannelMessage) return; + final ChannelMessage(:streamId, :topic, :senderId, id: int messageId) = message; ((streamSenders[streamId] ??= {}) [senderId] ??= MessageIdTracker()).add(messageId); (((topicSenders[streamId] ??= {})[topic] ??= {}) @@ -73,7 +73,7 @@ class RecentSenders { final messagesByUser = >{}; for (final id in event.messageIds) { - final message = cachedMessages[id] as StreamMessage?; + final message = cachedMessages[id] as ChannelMessage?; if (message == null) continue; (messagesByUser[message.senderId] ??= []).add(id); } diff --git a/lib/model/unreads.dart b/lib/model/unreads.dart index 00a0418af4..83bea8ab07 100644 --- a/lib/model/unreads.dart +++ b/lib/model/unreads.dart @@ -213,7 +213,7 @@ class Unreads extends ChangeNotifier { } switch (message) { - case StreamMessage(): + case ChannelMessage(): _addLastInStreamTopic(message.id, message.streamId, message.topic); case DmMessage(): final narrow = DmNarrow.ofMessage(message, selfUserId: selfUserId); diff --git a/lib/widgets/action_sheet.dart b/lib/widgets/action_sheet.dart index 9ff17385ec..0701cf166f 100644 --- a/lib/widgets/action_sheet.dart +++ b/lib/widgets/action_sheet.dart @@ -245,7 +245,7 @@ class QuoteAndReplyButton extends MessageActionSheetMenuItemButton { if ( topicController != null && topicController.textNormalized == kNoTopicTopic - && message is StreamMessage + && message is ChannelMessage ) { topicController.value = TextEditingValue(text: message.topic); } diff --git a/lib/widgets/message_list.dart b/lib/widgets/message_list.dart index cb9ff0a038..d4f50363c0 100644 --- a/lib/widgets/message_list.dart +++ b/lib/widgets/message_list.dart @@ -811,7 +811,7 @@ class RecipientHeader extends StatelessWidget { Widget build(BuildContext context) { final message = this.message; return switch (message) { - StreamMessage() => StreamMessageRecipientHeader(message: message, + ChannelMessage() => StreamMessageRecipientHeader(message: message, showStream: narrow is CombinedFeedNarrow), DmMessage() => DmRecipientHeader(message: message), }; @@ -930,7 +930,7 @@ class StreamMessageRecipientHeader extends StatelessWidget { required this.showStream, }); - final StreamMessage message; + final ChannelMessage message; final bool showStream; @override diff --git a/test/example_data.dart b/test/example_data.dart index e7fb1179b1..28e14634c0 100644 --- a/test/example_data.dart +++ b/test/example_data.dart @@ -317,7 +317,7 @@ const defaultStreamMessageStreamId = 123; /// /// See also: /// * [dmMessage], to construct an example direct message. -StreamMessage streamMessage({ +ChannelMessage streamMessage({ int? id, User? sender, ZulipStream? stream, @@ -335,7 +335,7 @@ StreamMessage streamMessage({ // of the properties as we're constructing the data. That's probably OK // because (a) this is only for tests; (b) the types do get checked // dynamically in the constructor, so any ill-typing won't propagate further. - return StreamMessage.fromJson(deepToJson({ + return ChannelMessage.fromJson(deepToJson({ ..._messagePropertiesBase, ..._messagePropertiesFromSender(sender), ..._messagePropertiesFromContent(content, contentMarkdown), @@ -416,7 +416,7 @@ const _unreadMsgs = unreadMsgs; // Events. // -DeleteMessageEvent deleteMessageEvent(List messages) { +DeleteMessageEvent deleteMessageEvent(List messages) { assert(messages.isNotEmpty); final streamId = messages.first.streamId; final topic = messages.first.topic; @@ -450,7 +450,7 @@ UpdateMessageEvent updateMessageEditEvent( messageIds: [messageId], flags: flags ?? origMessage.flags, editTimestamp: editTimestamp ?? 1234567890, // TODO generate timestamp - origStreamId: origMessage is StreamMessage ? origMessage.streamId : null, + origStreamId: origMessage is ChannelMessage ? origMessage.streamId : null, newStreamId: null, propagateMode: null, origTopic: null, @@ -482,7 +482,7 @@ UpdateMessageEvent updateMessageMoveEvent( messageIds: messages.map((message) => message.id).toList(), flags: origMessage.flags, editTimestamp: 1234567890, // TODO generate timestamp - origStreamId: origMessage is StreamMessage ? origMessage.streamId : null, + origStreamId: origMessage is ChannelMessage ? origMessage.streamId : null, newStreamId: newStreamId, propagateMode: null, origTopic: origTopic, @@ -510,7 +510,7 @@ UpdateMessageFlagsRemoveEvent updateMessageFlagsRemoveEvent( return MapEntry( message.id, switch (message) { - StreamMessage() => UpdateMessageFlagsMessageDetail( + ChannelMessage() => UpdateMessageFlagsMessageDetail( type: MessageType.stream, mentioned: mentioned, streamId: message.streamId, diff --git a/test/model/message_list_test.dart b/test/model/message_list_test.dart index 441e8b7e46..8131809a62 100644 --- a/test/model/message_list_test.dart +++ b/test/model/message_list_test.dart @@ -969,7 +969,7 @@ void checkInvariants(MessageListView model) { check(model.store.messages)[message.id].isNotNull().identicalTo(message); check(model.narrow.containsMessage(message)).isTrue(); - if (message is! StreamMessage) continue; + if (message is! ChannelMessage) continue; switch (model.narrow) { case CombinedFeedNarrow(): check(model.store.isTopicVisible(message.streamId, message.topic)) diff --git a/test/model/recent_senders_test.dart b/test/model/recent_senders_test.dart index 2da516e11c..9d8748afbf 100644 --- a/test/model/recent_senders_test.dart +++ b/test/model/recent_senders_test.dart @@ -9,11 +9,11 @@ void checkMatchesMessages(RecentSenders model, List messages) { final Map>> messagesByUserInStream = {}; final Map>>> messagesByUserInTopic = {}; for (final message in messages) { - if (message is! StreamMessage) { + if (message is! ChannelMessage) { throw UnsupportedError('Message of type ${message.runtimeType} is not expected.'); } - final StreamMessage(:streamId, :topic, :senderId, id: int messageId) = message; + final ChannelMessage(:streamId, :topic, :senderId, id: int messageId) = message; ((messagesByUserInStream[streamId] ??= {}) [senderId] ??= {}).add(messageId); @@ -73,7 +73,7 @@ void main() { setupModel(oldMessages); model.handleMessages(newMessages); final expectedMessages = [...oldMessages, ...newMessages] - ..removeWhere((m) => m is! StreamMessage); + ..removeWhere((m) => m is! ChannelMessage); checkMatchesMessages(model, expectedMessages); } diff --git a/test/model/unreads_test.dart b/test/model/unreads_test.dart index b5f50405b5..b05d8b8c9c 100644 --- a/test/model/unreads_test.dart +++ b/test/model/unreads_test.dart @@ -66,7 +66,7 @@ void main() { continue; } switch (message) { - case StreamMessage(): + case ChannelMessage(): final perTopic = expectedStreams[message.streamId] ??= {}; final messageIds = perTopic[message.topic] ??= QueueList(); messageIds.add(message.id); @@ -440,7 +440,7 @@ void main() { final expectedRemainingMessages = Set.of(messages); for (final message in messages) { final event = switch (message) { - StreamMessage() => DeleteMessageEvent( + ChannelMessage() => DeleteMessageEvent( id: 0, messageType: MessageType.stream, messageIds: [message.id], diff --git a/test/widgets/action_sheet_test.dart b/test/widgets/action_sheet_test.dart index 423ae8dbe0..00e7b491c3 100644 --- a/test/widgets/action_sheet_test.dart +++ b/test/widgets/action_sheet_test.dart @@ -41,7 +41,7 @@ Future setupToMessageActionSheet(WidgetTester tester, { await testBinding.globalStore.add(eg.selfAccount, eg.initialSnapshot()); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); await store.addUser(eg.user(userId: message.senderId)); - if (message is StreamMessage) { + if (message is ChannelMessage) { final stream = eg.stream(streamId: message.streamId); await store.addStream(stream); await store.addSubscription(eg.subscription(stream)); diff --git a/test/widgets/inbox_test.dart b/test/widgets/inbox_test.dart index 551c57da11..178aac413a 100644 --- a/test/widgets/inbox_test.dart +++ b/test/widgets/inbox_test.dart @@ -82,7 +82,7 @@ void main() { await tester.pumpAndSettle(); } - List generateStreamMessages({ + List generateChannelMessages({ required ZulipStream stream, required int count, required List flags, @@ -104,9 +104,9 @@ void main() { users: [eg.selfUser, eg.otherUser, eg.thirdUser, eg.fourthUser], unreadMessages: [ eg.streamMessage(stream: stream1, topic: 'specific topic', flags: []), - ...generateStreamMessages(stream: stream1, count: 10, flags: []), + ...generateChannelMessages(stream: stream1, count: 10, flags: []), eg.streamMessage(stream: stream2, flags: []), - ...generateStreamMessages(stream: stream2, count: 40, flags: []), + ...generateChannelMessages(stream: stream2, count: 40, flags: []), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: []), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser, eg.thirdUser], flags: []), eg.dmMessage(from: eg.thirdUser, to: [eg.selfUser], flags: []), diff --git a/test/widgets/message_list_test.dart b/test/widgets/message_list_test.dart index 4bc3c296da..15d01f6d35 100644 --- a/test/widgets/message_list_test.dart +++ b/test/widgets/message_list_test.dart @@ -1003,7 +1003,7 @@ void main() { flags: [MessageFlag.starred]), eg.streamMessage(), ]; - final StreamMessage messageWithMarker = messages[1]; + final ChannelMessage messageWithMarker = messages[1]; await setupMessageListPage(tester, messages: messages); final rectsBefore = captureMessageRects(tester, messages, messageWithMarker); checkMarkersCount(edited: 0, moved: 0); From ecaf03a24389c3b5633a2a094bc83266e3cb3979 Mon Sep 17 00:00:00 2001 From: Khader M Khudair Date: Sun, 28 Jul 2024 08:02:49 +0300 Subject: [PATCH 2/2] api [nfc]: Rename references of `ChannelMessage` to match new name --- integration_test/unreadmarker_test.dart | 2 +- lib/model/unreads.dart | 4 +- lib/widgets/message_list.dart | 6 +- test/api/model/events_test.dart | 6 +- test/api/model/model_test.dart | 6 +- test/api/route/messages_test.dart | 22 +-- test/example_data.dart | 18 +- test/model/autocomplete_test.dart | 24 +-- test/model/compose_test.dart | 2 +- test/model/message_list_test.dart | 164 +++++++++---------- test/model/message_test.dart | 86 +++++----- test/model/narrow_test.dart | 14 +- test/model/recent_dm_conversations_test.dart | 4 +- test/model/recent_senders_test.dart | 56 +++---- test/model/unreads_test.dart | 114 ++++++------- test/notifications/display_test.dart | 50 +++--- test/widgets/action_sheet_test.dart | 36 ++-- test/widgets/actions_test.dart | 8 +- test/widgets/compose_box_test.dart | 2 +- test/widgets/content_test.dart | 2 +- test/widgets/emoji_reaction_test.dart | 2 +- test/widgets/inbox_test.dart | 20 +-- test/widgets/lightbox_test.dart | 8 +- test/widgets/message_list_test.dart | 110 ++++++------- 24 files changed, 383 insertions(+), 383 deletions(-) diff --git a/integration_test/unreadmarker_test.dart b/integration_test/unreadmarker_test.dart index babc6cd3e8..a6e312a4a9 100644 --- a/integration_test/unreadmarker_test.dart +++ b/integration_test/unreadmarker_test.dart @@ -27,7 +27,7 @@ void main() { // prepare message list data final messages = List.generate(messageCount, - (i) => eg.streamMessage(flags: [MessageFlag.read])); + (i) => eg.channelMessage(flags: [MessageFlag.read])); connection.prepare(json: newestResult(foundOldest: true, messages: messages).toJson()); diff --git a/lib/model/unreads.dart b/lib/model/unreads.dart index 83bea8ab07..5793e3db71 100644 --- a/lib/model/unreads.dart +++ b/lib/model/unreads.dart @@ -33,7 +33,7 @@ import 'channel.dart'; // TODO handle moved messages // TODO When [oldUnreadsMissing], if you load a message list with very old unreads, // sync to those unreads, because the user has shown an interest in them. -// TODO When loading a message list with stream messages, check all the stream +// TODO When loading a message list with channel messages, check all the stream // messages and refresh [mentions] (see [mentions] dartdoc). class Unreads extends ChangeNotifier { factory Unreads({ @@ -86,7 +86,7 @@ class Unreads extends ChangeNotifier { // TODO excluded for now; would need to handle nuances around muting etc. // int count; - /// Unread stream messages, as: stream ID → topic → message IDs (sorted). + /// Unread channel messages, as: stream ID → topic → message IDs (sorted). final Map>> streams; /// Unread DM messages, as: DM narrow → message IDs (sorted). diff --git a/lib/widgets/message_list.dart b/lib/widgets/message_list.dart index d4f50363c0..1786d4dc9f 100644 --- a/lib/widgets/message_list.dart +++ b/lib/widgets/message_list.dart @@ -811,7 +811,7 @@ class RecipientHeader extends StatelessWidget { Widget build(BuildContext context) { final message = this.message; return switch (message) { - ChannelMessage() => StreamMessageRecipientHeader(message: message, + ChannelMessage() => ChannelMessageRecipientHeader(message: message, showStream: narrow is CombinedFeedNarrow), DmMessage() => DmRecipientHeader(message: message), }; @@ -923,8 +923,8 @@ class _UnreadMarker extends StatelessWidget { } } -class StreamMessageRecipientHeader extends StatelessWidget { - const StreamMessageRecipientHeader({ +class ChannelMessageRecipientHeader extends StatelessWidget { + const ChannelMessageRecipientHeader({ super.key, required this.message, required this.showStream, diff --git a/test/api/model/events_test.dart b/test/api/model/events_test.dart index 0f1f52f843..d41e4f694d 100644 --- a/test/api/model/events_test.dart +++ b/test/api/model/events_test.dart @@ -76,7 +76,7 @@ void main() { }); test('message: move flags into message object', () { - final message = eg.streamMessage(); + final message = eg.channelMessage(); MessageEvent mkEvent(List flags) => Event.fromJson({ 'type': 'message', 'id': 1, @@ -89,7 +89,7 @@ void main() { }); group('update_message', () { - final message = eg.streamMessage(); + final message = eg.channelMessage(); final baseJson = { 'id': 1, 'type': 'update_message', @@ -121,7 +121,7 @@ void main() { }); }); - test('delete_message: require streamId and topic for stream messages', () { + test('delete_message: require streamId and topic for channel messages', () { check(() => DeleteMessageEvent.fromJson({ 'id': 1, 'type': 'delete_message', diff --git a/test/api/model/model_test.dart b/test/api/model/model_test.dart index 3e2f9f82f7..caf37ee082 100644 --- a/test/api/model/model_test.dart +++ b/test/api/model/model_test.dart @@ -119,7 +119,7 @@ void main() { group('Message', () { Map baseStreamJson() => - deepToJson(eg.streamMessage()) as Map; + deepToJson(eg.channelMessage()) as Map; test('subject -> topic', () { check(baseStreamJson()).not((it) => it.containsKey('topic')); @@ -137,7 +137,7 @@ void main() { test('no crash on unrecognized flag', () { final m1 = Message.fromJson( - (deepToJson(eg.streamMessage()) as Map) + (deepToJson(eg.channelMessage()) as Map) ..['flags'] = ['read', 'something_unknown'], ); check(m1).flags.deepEquals([MessageFlag.read, MessageFlag.unknown]); @@ -217,7 +217,7 @@ void main() { }); group('MessageEditState', () { - Map baseJson() => deepToJson(eg.streamMessage()) as Map; + Map baseJson() => deepToJson(eg.channelMessage()) as Map; group('Edit history is absent', () { test('Message with no evidence of an edit history -> none', () { diff --git a/test/api/route/messages_test.dart b/test/api/route/messages_test.dart index 32efc676cd..f4d374143e 100644 --- a/test/api/route/messages_test.dart +++ b/test/api/route/messages_test.dart @@ -50,7 +50,7 @@ void main() { test('modern; message found', () { return FakeApiConnection.with_((connection) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); final fakeResult = GetMessageResult(message: message); connection.prepare(json: fakeResult.toJson()); final result = await checkGetMessageCompat(connection, @@ -64,7 +64,7 @@ void main() { test('modern; message not found', () { return FakeApiConnection.with_((connection) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); final fakeResponseJson = { 'code': 'BAD_REQUEST', 'msg': 'Invalid message(s)', @@ -82,7 +82,7 @@ void main() { test('legacy; message found', () { return FakeApiConnection.with_(zulipFeatureLevel: 119, (connection) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); final fakeResult = GetMessagesResult( anchor: message.id, foundNewest: false, @@ -103,7 +103,7 @@ void main() { test('legacy; message not found', () { return FakeApiConnection.with_(zulipFeatureLevel: 119, (connection) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); final fakeResult = GetMessagesResult( anchor: message.id, foundNewest: false, @@ -141,7 +141,7 @@ void main() { return result; } - final fakeResult = GetMessageResult(message: eg.streamMessage()); + final fakeResult = GetMessageResult(message: eg.channelMessage()); test('applyMarkdown true', () { return FakeApiConnection.with_((connection) async { @@ -489,7 +489,7 @@ void main() { test('unicode emoji', () { return FakeApiConnection.with_((connection) async { await checkAddReaction(connection, - messageId: eg.streamMessage().id, + messageId: eg.channelMessage().id, reaction: eg.unicodeEmojiReaction, expectedReactionType: 'unicode_emoji'); }); @@ -498,7 +498,7 @@ void main() { test('realm emoji', () { return FakeApiConnection.with_((connection) async { await checkAddReaction(connection, - messageId: eg.streamMessage().id, + messageId: eg.channelMessage().id, reaction: eg.realmEmojiReaction, expectedReactionType: 'realm_emoji'); }); @@ -507,7 +507,7 @@ void main() { test('Zulip extra emoji', () { return FakeApiConnection.with_((connection) async { await checkAddReaction(connection, - messageId: eg.streamMessage().id, + messageId: eg.channelMessage().id, reaction: eg.zulipExtraEmojiReaction, expectedReactionType: 'zulip_extra_emoji'); }); @@ -540,7 +540,7 @@ void main() { test('unicode emoji', () { return FakeApiConnection.with_((connection) async { await checkRemoveReaction(connection, - messageId: eg.streamMessage().id, + messageId: eg.channelMessage().id, reaction: eg.unicodeEmojiReaction, expectedReactionType: 'unicode_emoji'); }); @@ -549,7 +549,7 @@ void main() { test('realm emoji', () { return FakeApiConnection.with_((connection) async { await checkRemoveReaction(connection, - messageId: eg.streamMessage().id, + messageId: eg.channelMessage().id, reaction: eg.realmEmojiReaction, expectedReactionType: 'realm_emoji'); }); @@ -558,7 +558,7 @@ void main() { test('Zulip extra emoji', () { return FakeApiConnection.with_((connection) async { await checkRemoveReaction(connection, - messageId: eg.streamMessage().id, + messageId: eg.channelMessage().id, reaction: eg.zulipExtraEmojiReaction, expectedReactionType: 'zulip_extra_emoji'); }); diff --git a/test/example_data.dart b/test/example_data.dart index 28e14634c0..c35ccf9925 100644 --- a/test/example_data.dart +++ b/test/example_data.dart @@ -302,22 +302,22 @@ Map _messagePropertiesFromContent(String? content, String? cont int _nextMessageId() => (_lastMessageId += 1 + Random().nextInt(100)); int _lastMessageId = 1000; -const defaultStreamMessageStreamId = 123; +const defaultChannelMessageStreamId = 123; -/// Construct an example stream message. +/// Construct an example stream channel. /// /// If the message ID `id` is not given, it will be generated from a random /// but increasing sequence, which is shared with [dmMessage]. /// Use an explicit `id` only if the ID needs to correspond to some other data /// in the test, or if the IDs need to increase in a different order from the -/// calls to [streamMessage] and [dmMessage]. +/// calls to [channelMessage] and [dmMessage]. /// /// The message will be in `stream` if given. Otherwise, -/// an example stream with ID `defaultStreamMessageStreamId` will be used. +/// an example stream with ID `defaultChannelMessageStreamId` will be used. /// /// See also: /// * [dmMessage], to construct an example direct message. -ChannelMessage streamMessage({ +ChannelMessage channelMessage({ int? id, User? sender, ZulipStream? stream, @@ -329,7 +329,7 @@ ChannelMessage streamMessage({ int? timestamp, List? flags, }) { - final effectiveStream = stream ?? _stream(streamId: defaultStreamMessageStreamId); + final effectiveStream = stream ?? _stream(streamId: defaultChannelMessageStreamId); // The use of JSON here is convenient in order to delegate parts of the data // to helper functions. The main downside is that it loses static typing // of the properties as we're constructing the data. That's probably OK @@ -354,13 +354,13 @@ ChannelMessage streamMessage({ /// Construct an example direct message. /// /// If the message ID `id` is not given, it will be generated from a random -/// but increasing sequence, which is shared with [streamMessage]. +/// but increasing sequence, which is shared with [channelMessage]. /// Use an explicit `id` only if the ID needs to correspond to some other data /// in the test, or if the IDs need to increase in a different order from the -/// calls to [streamMessage] and [dmMessage]. +/// calls to [channelMessage] and [dmMessage]. /// /// See also: -/// * [streamMessage], to construct an example stream message. +/// * [channelMessage], to construct an example channel message. DmMessage dmMessage({ int? id, required User from, diff --git a/test/model/autocomplete_test.dart b/test/model/autocomplete_test.dart index f74006fed2..c7bc3941c7 100644 --- a/test/model/autocomplete_test.dart +++ b/test/model/autocomplete_test.dart @@ -394,7 +394,7 @@ void main() { const topic2 = 'topic2'; Message message(User sender, String topic) { - return eg.streamMessage(sender: sender, stream: stream, topic: topic); + return eg.channelMessage(sender: sender, stream: stream, topic: topic); } int compareAB({required String? topic}) { @@ -514,10 +514,10 @@ void main() { final stream = eg.stream(); final narrow = TopicNarrow(stream.streamId, 'this'); await prepare(users: users, messages: [ - eg.streamMessage(sender: users[1], stream: stream, topic: 'this'), - eg.streamMessage(sender: users[0], stream: stream, topic: 'this'), - eg.streamMessage(sender: users[2], stream: stream, topic: 'other'), - eg.streamMessage(sender: users[1], stream: stream, topic: 'other'), + eg.channelMessage(sender: users[1], stream: stream, topic: 'this'), + eg.channelMessage(sender: users[0], stream: stream, topic: 'this'), + eg.channelMessage(sender: users[2], stream: stream, topic: 'other'), + eg.channelMessage(sender: users[1], stream: stream, topic: 'other'), eg.dmMessage(from: users[3], to: [users[4], eg.selfUser]), eg.dmMessage(from: users[2], to: [eg.selfUser]), ]); @@ -532,8 +532,8 @@ void main() { final stream = eg.stream(); final narrow = ChannelNarrow(stream.streamId); await prepare(users: users, messages: [ - eg.streamMessage(sender: users[1], stream: stream), - eg.streamMessage(sender: users[0], stream: stream), + eg.channelMessage(sender: users[1], stream: stream), + eg.channelMessage(sender: users[0], stream: stream), eg.dmMessage(from: users[2], to: [users[3], eg.selfUser]), eg.dmMessage(from: users[1], to: [eg.selfUser]), ]); @@ -548,9 +548,9 @@ void main() { eg.dmMessage(from: users[3], to: [eg.selfUser]), eg.dmMessage(from: users[1], to: [users[2], eg.selfUser]), eg.dmMessage(from: users[0], to: [eg.selfUser]), - eg.streamMessage(sender: users[1]), - eg.streamMessage(sender: users[2]), - eg.streamMessage(sender: users[3]), + eg.channelMessage(sender: users[1]), + eg.channelMessage(sender: users[2]), + eg.channelMessage(sender: users[3]), ]); for (final narrow in [ DmNarrow.withUser(users[3].userId, selfUserId: eg.selfUser.userId), @@ -601,8 +601,8 @@ void main() { ]; await prepare(users: users, messages: [ - eg.streamMessage(id: 50, sender: users[1-1], stream: stream, topic: topic), - eg.streamMessage(id: 60, sender: users[5-1], stream: stream, topic: 'other $topic'), + eg.channelMessage(id: 50, sender: users[1-1], stream: stream, topic: topic), + eg.channelMessage(id: 60, sender: users[5-1], stream: stream, topic: 'other $topic'), ], dmConversations: [ RecentDmConversation(userIds: [4], maxMessageId: 300), RecentDmConversation(userIds: [1], maxMessageId: 200), diff --git a/test/model/compose_test.dart b/test/model/compose_test.dart index 96b2491102..75e2366329 100644 --- a/test/model/compose_test.dart +++ b/test/model/compose_test.dart @@ -338,7 +338,7 @@ hello test('quoteAndReply / quoteAndReplyPlaceholder', () async { final sender = eg.user(userId: 123, fullName: 'Full Name'); final stream = eg.stream(streamId: 1, name: 'test here'); - final message = eg.streamMessage(sender: sender, stream: stream, topic: 'some topic'); + final message = eg.channelMessage(sender: sender, stream: stream, topic: 'some topic'); final store = eg.store(); await store.addStream(stream); await store.addUser(sender); diff --git a/test/model/message_list_test.dart b/test/model/message_list_test.dart index 8131809a62..607ec3770c 100644 --- a/test/model/message_list_test.dart +++ b/test/model/message_list_test.dart @@ -42,7 +42,7 @@ void main() { /// Initialize [model] and the rest of the test state. Future prepare({Narrow narrow = const CombinedFeedNarrow()}) async { - final stream = eg.stream(streamId: eg.defaultStreamMessageStreamId); + final stream = eg.stream(streamId: eg.defaultChannelMessageStreamId); subscription = eg.subscription(stream); store = eg.store(); await store.addStream(stream); @@ -96,7 +96,7 @@ void main() { connection.prepare(json: newestResult( foundOldest: false, messages: List.generate(kMessageListFetchBatchSize, - (i) => eg.streamMessage()), + (i) => eg.channelMessage()), ).toJson()); final fetchFuture = model.fetchInitial(); check(model).fetched.isFalse(); @@ -119,7 +119,7 @@ void main() { await prepare(); connection.prepare(json: newestResult( foundOldest: true, - messages: List.generate(30, (i) => eg.streamMessage()), + messages: List.generate(30, (i) => eg.channelMessage()), ).toJson()); await model.fetchInitial(); checkNotifiedOnce(); @@ -147,9 +147,9 @@ void main() { const narrow = CombinedFeedNarrow(); await prepare(narrow: narrow); final messages = [ - eg.streamMessage(), + eg.channelMessage(), // Not subscribed to the stream with id 10. - eg.streamMessage(stream: eg.stream(streamId: 10)), + eg.channelMessage(stream: eg.stream(streamId: 10)), ]; connection.prepare(json: newestResult( foundOldest: false, @@ -165,11 +165,11 @@ void main() { const narrow = CombinedFeedNarrow(); await prepare(narrow: narrow); await prepareMessages(foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 1000 + i))); + messages: List.generate(100, (i) => eg.channelMessage(id: 1000 + i))); connection.prepare(json: olderResult( anchor: 1000, foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 900 + i)), + messages: List.generate(100, (i) => eg.channelMessage(id: 900 + i)), ).toJson()); final fetchFuture = model.fetchOlder(); checkNotifiedOnce(); @@ -193,11 +193,11 @@ void main() { const narrow = CombinedFeedNarrow(); await prepare(narrow: narrow); await prepareMessages(foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 1000 + i))); + messages: List.generate(100, (i) => eg.channelMessage(id: 1000 + i))); connection.prepare(json: olderResult( anchor: 1000, foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 900 + i)), + messages: List.generate(100, (i) => eg.channelMessage(id: 900 + i)), ).toJson()); final fetchFuture = model.fetchOlder(); checkNotifiedOnce(); @@ -221,7 +221,7 @@ void main() { test('fetchOlder nop when already haveOldest true', () async { await prepare(narrow: const CombinedFeedNarrow()); await prepareMessages(foundOldest: true, messages: - List.generate(30, (i) => eg.streamMessage())); + List.generate(30, (i) => eg.channelMessage())); check(model) ..haveOldest.isTrue() ..messages.length.equals(30); @@ -239,12 +239,12 @@ void main() { const narrow = CombinedFeedNarrow(); await prepare(narrow: narrow); await prepareMessages(foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 1000 + i))); + messages: List.generate(100, (i) => eg.channelMessage(id: 1000 + i))); // The old behavior is to include the anchor message regardless of includeAnchor. connection.prepare(json: olderResult( anchor: 1000, foundOldest: false, foundAnchor: true, - messages: List.generate(101, (i) => eg.streamMessage(id: 900 + i)), + messages: List.generate(101, (i) => eg.channelMessage(id: 900 + i)), ).toJson()); await model.fetchOlder(); checkNotified(count: 2); @@ -257,12 +257,12 @@ void main() { test('fetchOlder, recent senders track all the messages', () async { const narrow = CombinedFeedNarrow(); await prepare(narrow: narrow); - final initialMessages = List.generate(10, (i) => eg.streamMessage(id: 100 + i)); + final initialMessages = List.generate(10, (i) => eg.channelMessage(id: 100 + i)); await prepareMessages(foundOldest: false, messages: initialMessages); - final oldMessages = List.generate(10, (i) => eg.streamMessage(id: 89 + i)) + final oldMessages = List.generate(10, (i) => eg.channelMessage(id: 89 + i)) // Not subscribed to the stream with id 10. - ..add(eg.streamMessage(id: 99, stream: eg.stream(streamId: 10))); + ..add(eg.channelMessage(id: 99, stream: eg.stream(streamId: 10))); connection.prepare(json: olderResult( anchor: 100, foundOldest: false, messages: oldMessages, @@ -278,11 +278,11 @@ void main() { final stream = eg.stream(); await prepare(narrow: ChannelNarrow(stream.streamId)); await prepareMessages(foundOldest: true, messages: - List.generate(30, (i) => eg.streamMessage(stream: stream))); + List.generate(30, (i) => eg.channelMessage(stream: stream))); check(model).messages.length.equals(30); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(stream: stream))); + message: eg.channelMessage(stream: stream))); checkNotifiedOnce(); check(model).messages.length.equals(31); }); @@ -291,12 +291,12 @@ void main() { final stream = eg.stream(); await prepare(narrow: ChannelNarrow(stream.streamId)); await prepareMessages(foundOldest: true, messages: - List.generate(30, (i) => eg.streamMessage(stream: stream))); + List.generate(30, (i) => eg.channelMessage(stream: stream))); check(model).messages.length.equals(30); final otherStream = eg.stream(); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(stream: otherStream))); + message: eg.channelMessage(stream: otherStream))); checkNotNotified(); check(model).messages.length.equals(30); }); @@ -305,14 +305,14 @@ void main() { final stream = eg.stream(); await prepare(narrow: ChannelNarrow(stream.streamId)); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(stream: stream))); + message: eg.channelMessage(stream: stream))); checkNotNotified(); check(model).fetched.isFalse(); }); group('DeleteMessageEvent', () { final stream = eg.stream(); - final messages = List.generate(30, (i) => eg.streamMessage(stream: stream)); + final messages = List.generate(30, (i) => eg.channelMessage(stream: stream)); test('in narrow', () async { await prepare(narrow: ChannelNarrow(stream.streamId)); @@ -374,7 +374,7 @@ void main() { test('message present', () async { await prepare(narrow: const CombinedFeedNarrow()); await prepareMessages(foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 100 + i))); + messages: List.generate(100, (i) => eg.channelMessage(id: 100 + i))); model.notifyListenersIfMessagePresent(150); checkNotifiedOnce(); }); @@ -382,7 +382,7 @@ void main() { test('message absent', () async { await prepare(narrow: const CombinedFeedNarrow()); await prepareMessages(foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 100 + i)) + messages: List.generate(100, (i) => eg.channelMessage(id: 100 + i)) .where((m) => m.id != 150).toList()); model.notifyListenersIfMessagePresent(150); checkNotNotified(); @@ -391,7 +391,7 @@ void main() { test('message absent (older than window)', () async { await prepare(narrow: const CombinedFeedNarrow()); await prepareMessages(foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 100 + i))); + messages: List.generate(100, (i) => eg.channelMessage(id: 100 + i))); model.notifyListenersIfMessagePresent(50); checkNotNotified(); }); @@ -399,14 +399,14 @@ void main() { test('message absent (newer than window)', () async { await prepare(narrow: const CombinedFeedNarrow()); await prepareMessages(foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 100 + i))); + messages: List.generate(100, (i) => eg.channelMessage(id: 100 + i))); model.notifyListenersIfMessagePresent(250); checkNotNotified(); }); }); group('notifyListenersIfAnyMessagePresent', () { - final messages = List.generate(100, (i) => eg.streamMessage(id: 100 + i)); + final messages = List.generate(100, (i) => eg.channelMessage(id: 100 + i)); test('all messages present', () async { await prepare(narrow: const CombinedFeedNarrow()); @@ -436,7 +436,7 @@ void main() { test('message present', () async { await prepare(narrow: const CombinedFeedNarrow()); await prepareMessages(foundOldest: false, - messages: List.generate(10, (i) => eg.streamMessage(id: 10 + i))); + messages: List.generate(10, (i) => eg.channelMessage(id: 10 + i))); final message = model.messages[5]; await store.handleEvent(eg.updateMessageEditEvent(message, @@ -450,7 +450,7 @@ void main() { await prepare(narrow: narrow); final messagesInNarrow = List.generate(10, - (i) => eg.streamMessage(id: 10 + i, stream: stream)); + (i) => eg.channelMessage(id: 10 + i, stream: stream)); check(messagesInNarrow.every(narrow.containsMessage)).isTrue(); final messageNotInNarrow = eg.dmMessage(id: 100, from: eg.otherUser, to: [eg.selfUser]); @@ -486,11 +486,11 @@ void main() { for (final m in [model1, model2]) { connection.prepare(json: newestResult( foundOldest: false, - messages: [eg.streamMessage(stream: stream, topic: 'hello')]).toJson()); + messages: [eg.channelMessage(stream: stream, topic: 'hello')]).toJson()); await m.fetchInitial(); } - final message = eg.streamMessage(stream: stream, topic: 'hello'); + final message = eg.channelMessage(stream: stream, topic: 'hello'); await store.handleEvent(MessageEvent(id: 0, message: message)); await store.handleEvent( @@ -514,7 +514,7 @@ void main() { await store.addSubscription(eg.subscription(stream)); connection = store.connection as FakeApiConnection; - final message = eg.streamMessage(stream: stream); + final message = eg.channelMessage(stream: stream); await store.addMessage(Message.fromJson(message.toJson())); await store.handleEvent(mkEvent(message)); @@ -572,9 +572,9 @@ void main() { final stream = eg.stream(); await prepare(narrow: ChannelNarrow(stream.streamId)); await prepareMessages(foundOldest: true, messages: - List.generate(30, (i) => eg.streamMessage(stream: stream))); + List.generate(30, (i) => eg.channelMessage(stream: stream))); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(stream: stream))); + message: eg.channelMessage(stream: stream))); checkNotifiedOnce(); check(model).messages.length.equals(31); @@ -605,10 +605,10 @@ void main() { // Check filtering on fetchInitial… await prepareMessages(foundOldest: false, messages: [ - eg.streamMessage(id: 201, stream: stream1, topic: 'A'), - eg.streamMessage(id: 202, stream: stream1, topic: 'B'), - eg.streamMessage(id: 203, stream: stream2, topic: 'C'), - eg.streamMessage(id: 204, stream: stream2, topic: 'D'), + eg.channelMessage(id: 201, stream: stream1, topic: 'A'), + eg.channelMessage(id: 202, stream: stream1, topic: 'B'), + eg.channelMessage(id: 203, stream: stream2, topic: 'C'), + eg.channelMessage(id: 204, stream: stream2, topic: 'D'), eg.dmMessage( id: 205, from: eg.otherUser, to: [eg.selfUser]), ]); final expected = []; @@ -618,10 +618,10 @@ void main() { // … and on fetchOlder… connection.prepare(json: olderResult( anchor: 201, foundOldest: true, messages: [ - eg.streamMessage(id: 101, stream: stream1, topic: 'A'), - eg.streamMessage(id: 102, stream: stream1, topic: 'B'), - eg.streamMessage(id: 103, stream: stream2, topic: 'C'), - eg.streamMessage(id: 104, stream: stream2, topic: 'D'), + eg.channelMessage(id: 101, stream: stream1, topic: 'A'), + eg.channelMessage(id: 102, stream: stream1, topic: 'B'), + eg.channelMessage(id: 103, stream: stream2, topic: 'C'), + eg.channelMessage(id: 104, stream: stream2, topic: 'D'), eg.dmMessage( id: 105, from: eg.otherUser, to: [eg.selfUser]), ]).toJson()); await model.fetchOlder(); @@ -631,22 +631,22 @@ void main() { // … and on MessageEvent. await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(id: 301, stream: stream1, topic: 'A'))); + message: eg.channelMessage(id: 301, stream: stream1, topic: 'A'))); checkNotifiedOnce(); check(model.messages.map((m) => m.id)).deepEquals(expected..add(301)); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(id: 302, stream: stream1, topic: 'B'))); + message: eg.channelMessage(id: 302, stream: stream1, topic: 'B'))); checkNotNotified(); check(model.messages.map((m) => m.id)).deepEquals(expected); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(id: 303, stream: stream2, topic: 'C'))); + message: eg.channelMessage(id: 303, stream: stream2, topic: 'C'))); checkNotifiedOnce(); check(model.messages.map((m) => m.id)).deepEquals(expected..add(303)); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(id: 304, stream: stream2, topic: 'D'))); + message: eg.channelMessage(id: 304, stream: stream2, topic: 'D'))); checkNotNotified(); check(model.messages.map((m) => m.id)).deepEquals(expected); @@ -666,9 +666,9 @@ void main() { // Check filtering on fetchInitial… await prepareMessages(foundOldest: false, messages: [ - eg.streamMessage(id: 201, stream: stream, topic: 'A'), - eg.streamMessage(id: 202, stream: stream, topic: 'B'), - eg.streamMessage(id: 203, stream: stream, topic: 'C'), + eg.channelMessage(id: 201, stream: stream, topic: 'A'), + eg.channelMessage(id: 202, stream: stream, topic: 'B'), + eg.channelMessage(id: 203, stream: stream, topic: 'C'), ]); final expected = []; check(model.messages.map((m) => m.id)) @@ -677,9 +677,9 @@ void main() { // … and on fetchOlder… connection.prepare(json: olderResult( anchor: 201, foundOldest: true, messages: [ - eg.streamMessage(id: 101, stream: stream, topic: 'A'), - eg.streamMessage(id: 102, stream: stream, topic: 'B'), - eg.streamMessage(id: 103, stream: stream, topic: 'C'), + eg.channelMessage(id: 101, stream: stream, topic: 'A'), + eg.channelMessage(id: 102, stream: stream, topic: 'B'), + eg.channelMessage(id: 103, stream: stream, topic: 'C'), ]).toJson()); await model.fetchOlder(); checkNotified(count: 2); @@ -688,17 +688,17 @@ void main() { // … and on MessageEvent. await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(id: 301, stream: stream, topic: 'A'))); + message: eg.channelMessage(id: 301, stream: stream, topic: 'A'))); checkNotifiedOnce(); check(model.messages.map((m) => m.id)).deepEquals(expected..add(301)); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(id: 302, stream: stream, topic: 'B'))); + message: eg.channelMessage(id: 302, stream: stream, topic: 'B'))); checkNotifiedOnce(); check(model.messages.map((m) => m.id)).deepEquals(expected..add(302)); await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(id: 303, stream: stream, topic: 'C'))); + message: eg.channelMessage(id: 303, stream: stream, topic: 'C'))); checkNotNotified(); check(model.messages.map((m) => m.id)).deepEquals(expected); }); @@ -712,7 +712,7 @@ void main() { // Check filtering on fetchInitial… await prepareMessages(foundOldest: false, messages: [ - eg.streamMessage(id: 201, stream: stream, topic: 'A'), + eg.channelMessage(id: 201, stream: stream, topic: 'A'), ]); final expected = []; check(model.messages.map((m) => m.id)) @@ -721,7 +721,7 @@ void main() { // … and on fetchOlder… connection.prepare(json: olderResult( anchor: 201, foundOldest: true, messages: [ - eg.streamMessage(id: 101, stream: stream, topic: 'A'), + eg.channelMessage(id: 101, stream: stream, topic: 'A'), ]).toJson()); await model.fetchOlder(); checkNotified(count: 2); @@ -730,7 +730,7 @@ void main() { // … and on MessageEvent. await store.handleEvent(MessageEvent(id: 0, - message: eg.streamMessage(id: 301, stream: stream, topic: 'A'))); + message: eg.channelMessage(id: 301, stream: stream, topic: 'A'))); checkNotifiedOnce(); check(model.messages.map((m) => m.id)).deepEquals(expected..add(301)); }); @@ -750,9 +750,9 @@ void main() { // doesn't need to exercise the different reasons that messages don't. const timestamp = 1693602618; - final stream = eg.stream(streamId: eg.defaultStreamMessageStreamId); - Message streamMessage(int id) => - eg.streamMessage(id: id, stream: stream, topic: 'foo', timestamp: timestamp); + final stream = eg.stream(streamId: eg.defaultChannelMessageStreamId); + Message channelMessage(int id) => + eg.channelMessage(id: id, stream: stream, topic: 'foo', timestamp: timestamp); Message dmMessage(int id) => eg.dmMessage(id: id, from: eg.selfUser, to: [], timestamp: timestamp); @@ -760,7 +760,7 @@ void main() { await prepare(); connection.prepare(json: newestResult( foundOldest: false, - messages: [streamMessage(10), streamMessage(11), dmMessage(12)], + messages: [channelMessage(10), channelMessage(11), dmMessage(12)], ).toJson()); await model.fetchInitial(); checkNotifiedOnce(); @@ -769,7 +769,7 @@ void main() { connection.prepare(json: olderResult( anchor: model.messages[0].id, foundOldest: false, - messages: [streamMessage(7), streamMessage(8), dmMessage(9)], + messages: [channelMessage(7), channelMessage(8), dmMessage(9)], ).toJson()); await model.fetchOlder(); checkNotified(count: 2); @@ -778,17 +778,17 @@ void main() { connection.prepare(json: olderResult( anchor: model.messages[0].id, foundOldest: false, - messages: [streamMessage(6)], + messages: [channelMessage(6)], ).toJson()); await model.fetchOlder(); checkNotified(count: 2); // Then test MessageEvent, where a new header is needed… - await store.handleEvent(MessageEvent(id: 0, message: streamMessage(13))); + await store.handleEvent(MessageEvent(id: 0, message: channelMessage(13))); checkNotifiedOnce(); // … and where it's not. - await store.handleEvent(MessageEvent(id: 0, message: streamMessage(14))); + await store.handleEvent(MessageEvent(id: 0, message: channelMessage(14))); checkNotifiedOnce(); // Then test UpdateMessageEvent edits, where a header is and remains needed… @@ -812,7 +812,7 @@ void main() { connection.prepare(json: olderResult( anchor: model.messages[0].id, foundOldest: true, - messages: [streamMessage(5)], + messages: [channelMessage(5)], ).toJson()); await model.fetchOlder(); checkNotified(count: 2); @@ -831,9 +831,9 @@ void main() { const t1 = 1693602618; const t2 = t1 + 86400; - final stream = eg.stream(streamId: eg.defaultStreamMessageStreamId); - Message streamMessage(int id, int timestamp, User sender) => - eg.streamMessage(id: id, sender: sender, + final stream = eg.stream(streamId: eg.defaultChannelMessageStreamId); + Message channelMessage(int id, int timestamp, User sender) => + eg.channelMessage(id: id, sender: sender, stream: stream, topic: 'foo', timestamp: timestamp); Message dmMessage(int id, int timestamp, User sender) => eg.dmMessage(id: id, from: sender, timestamp: timestamp, @@ -841,9 +841,9 @@ void main() { await prepare(); await prepareMessages(foundOldest: true, messages: [ - streamMessage(1, t1, eg.selfUser), // first message, so show sender - streamMessage(2, t1, eg.selfUser), // hide sender - streamMessage(3, t1, eg.otherUser), // no recipient header, but new sender + channelMessage(1, t1, eg.selfUser), // first message, so show sender + channelMessage(2, t1, eg.selfUser), // hide sender + channelMessage(3, t1, eg.otherUser), // no recipient header, but new sender dmMessage(4, t1, eg.otherUser), // same sender, but new recipient dmMessage(5, t2, eg.otherUser), // same sender/recipient, but new day ]); @@ -864,19 +864,19 @@ void main() { }); group('haveSameRecipient', () { - test('stream messages vs DMs, no match', () { + test('channel messages vs DMs, no match', () { final dmMessage = eg.dmMessage(from: eg.selfUser, to: [eg.otherUser]); - final streamMessage = eg.streamMessage(); - check(haveSameRecipient(streamMessage, dmMessage)).isFalse(); - check(haveSameRecipient(dmMessage, streamMessage)).isFalse(); + final channelMessage = eg.channelMessage(); + check(haveSameRecipient(channelMessage, dmMessage)).isFalse(); + check(haveSameRecipient(dmMessage, channelMessage)).isFalse(); }); - test('stream messages match just if same stream/topic', () { + test('channel messages match just if same stream/topic', () { final stream0 = eg.stream(); final stream1 = eg.stream(); - final messageAB = eg.streamMessage(stream: stream0, topic: 'foo'); - final messageXB = eg.streamMessage(stream: stream1, topic: 'foo'); - final messageAX = eg.streamMessage(stream: stream0, topic: 'bar'); + final messageAB = eg.channelMessage(stream: stream0, topic: 'foo'); + final messageXB = eg.channelMessage(stream: stream1, topic: 'foo'); + final messageAX = eg.channelMessage(stream: stream0, topic: 'bar'); check(haveSameRecipient(messageAB, messageAB)).isTrue(); check(haveSameRecipient(messageAB, messageXB)).isFalse(); check(haveSameRecipient(messageXB, messageAB)).isFalse(); @@ -940,8 +940,8 @@ void main() { final time0 = groups[i0][j0]; final time1 = groups[i1][j1]; check(because: 'times $time0, $time1', messagesSameDay( - eg.streamMessage(stream: stream, topic: 'foo', timestamp: timestampFromLocalTime(time0)), - eg.streamMessage(stream: stream, topic: 'foo', timestamp: timestampFromLocalTime(time1)), + eg.channelMessage(stream: stream, topic: 'foo', timestamp: timestampFromLocalTime(time0)), + eg.channelMessage(stream: stream, topic: 'foo', timestamp: timestampFromLocalTime(time1)), )).equals(i0 == i1); check(because: 'times $time0, $time1', messagesSameDay( eg.dmMessage(from: eg.selfUser, to: [], timestamp: timestampFromLocalTime(time0)), diff --git a/test/model/message_test.dart b/test/model/message_test.dart index 482d77b2c1..5678ce54f2 100644 --- a/test/model/message_test.dart +++ b/test/model/message_test.dart @@ -34,7 +34,7 @@ void main() { /// Initialize [store] and the rest of the test state. Future prepare({Narrow narrow = const CombinedFeedNarrow()}) async { - final stream = eg.stream(streamId: eg.defaultStreamMessageStreamId); + final stream = eg.stream(streamId: eg.defaultChannelMessageStreamId); subscription = eg.subscription(stream); store = eg.store(); await store.addStream(stream); @@ -73,8 +73,8 @@ void main() { test('from empty', () async { await prepare(); check(store.messages).isEmpty(); - final message1 = eg.streamMessage(); - final message2 = eg.streamMessage(); + final message1 = eg.channelMessage(); + final message2 = eg.channelMessage(); final message3 = eg.dmMessage(from: eg.otherUser, to: [eg.selfUser]); final messages = [message1, message2, message3]; store.reconcileMessages(messages); @@ -88,12 +88,12 @@ void main() { test('from not-empty', () async { await prepare(); - final message1 = eg.streamMessage(); - final message2 = eg.streamMessage(); + final message1 = eg.channelMessage(); + final message2 = eg.channelMessage(); final message3 = eg.dmMessage(from: eg.otherUser, to: [eg.selfUser]); final messages = [message1, message2, message3]; await addMessages(messages); - final newMessage = eg.streamMessage(); + final newMessage = eg.channelMessage(); store.reconcileMessages([newMessage]); check(messages).deepEquals( [message1, message2, message3] @@ -106,10 +106,10 @@ void main() { test('on ID collision, new message does not clobber old in store.messages', () async { await prepare(); - final message = eg.streamMessage(id: 1, content: '

foo

'); + final message = eg.channelMessage(id: 1, content: '

foo

'); await addMessages([message]); check(store.messages).deepEquals({1: message}); - final newMessage = eg.streamMessage(id: 1, content: '

bar

'); + final newMessage = eg.channelMessage(id: 1, content: '

bar

'); final messages = [newMessage]; store.reconcileMessages(messages); check(messages).single.identicalTo(message); @@ -122,7 +122,7 @@ void main() { await prepare(); check(store.messages).isEmpty(); - final newMessage = eg.streamMessage(); + final newMessage = eg.channelMessage(); await store.handleEvent(MessageEvent(id: 1, message: newMessage)); check(store.messages).deepEquals({ newMessage.id: newMessage, @@ -132,8 +132,8 @@ void main() { test('from not-empty', () async { await prepare(); final messages = [ - eg.streamMessage(), - eg.streamMessage(), + eg.channelMessage(), + eg.channelMessage(), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser]), ]; await addMessages(messages); @@ -141,7 +141,7 @@ void main() { for (final m in messages) m.id: m, }); - final newMessage = eg.streamMessage(); + final newMessage = eg.channelMessage(); await store.handleEvent(MessageEvent(id: 1, message: newMessage)); check(store.messages).deepEquals({ for (final m in messages) m.id: m, @@ -151,11 +151,11 @@ void main() { test('new message clobbers old on ID collision', () async { await prepare(); - final message = eg.streamMessage(id: 1, content: '

foo

'); + final message = eg.channelMessage(id: 1, content: '

foo

'); await addMessages([message]); check(store.messages).deepEquals({1: message}); - final newMessage = eg.streamMessage(id: 1, content: '

bar

'); + final newMessage = eg.channelMessage(id: 1, content: '

bar

'); await store.handleEvent(MessageEvent(id: 1, message: newMessage)); check(store.messages).deepEquals({1: newMessage}); }); @@ -165,8 +165,8 @@ void main() { test('update timestamps on all messages', () async { const t1 = 1718748879; const t2 = t1 + 60; - final message1 = eg.streamMessage(lastEditTimestamp: null); - final message2 = eg.streamMessage(lastEditTimestamp: t1); + final message1 = eg.channelMessage(lastEditTimestamp: null); + final message2 = eg.channelMessage(lastEditTimestamp: t1); // This event is a bit artificial, but convenient. // TODO use a realistic move-messages event here final updateEvent = Event.fromJson({ @@ -191,7 +191,7 @@ void main() { }); test('update a message', () async { - final originalMessage = eg.streamMessage( + final originalMessage = eg.channelMessage( content: "

Hello, world

"); final updateEvent = eg.updateMessageEditEvent(originalMessage, flags: [MessageFlag.starred], @@ -222,7 +222,7 @@ void main() { }); test('ignore when message unknown', () async { - final originalMessage = eg.streamMessage( + final originalMessage = eg.channelMessage( content: "

Hello, world

"); final updateEvent = eg.updateMessageEditEvent(originalMessage, messageId: originalMessage.id + 1, @@ -240,7 +240,7 @@ void main() { // TODO(server-5): Cut legacy case for rendering-only message update Future checkRenderingOnly({required bool legacy}) async { - final originalMessage = eg.streamMessage( + final originalMessage = eg.channelMessage( lastEditTimestamp: 78492, content: "

Hello, world

"); final updateEvent = eg.updateMessageEditEvent(originalMessage, @@ -273,8 +273,8 @@ void main() { }); group('Handle message edit state update', () { - final message = eg.streamMessage(); - final otherMessage = eg.streamMessage(); + final message = eg.channelMessage(); + final otherMessage = eg.channelMessage(); Future sendEvent(Message message, UpdateMessageEvent event) async { await prepare(); @@ -365,7 +365,7 @@ void main() { group('add flag', () { test('message is unknown', () async { await prepare(); - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); await prepareMessages([message]); await store.handleEvent(mkAddEvent(MessageFlag.read, [2])); checkNotNotified(); @@ -374,8 +374,8 @@ void main() { test('affected message, unaffected message, absent message', () async { await prepare(); - final message1 = eg.streamMessage(flags: []); - final message2 = eg.streamMessage(flags: []); + final message1 = eg.channelMessage(flags: []); + final message2 = eg.channelMessage(flags: []); await prepareMessages([message1, message2]); await store.handleEvent(mkAddEvent(MessageFlag.read, [message2.id, 3])); checkNotifiedOnce(); @@ -386,8 +386,8 @@ void main() { test('all: true; we have some known messages', () async { await prepare(); - final message1 = eg.streamMessage(flags: []); - final message2 = eg.streamMessage(flags: []); + final message1 = eg.channelMessage(flags: []); + final message2 = eg.channelMessage(flags: []); await prepareMessages([message1, message2]); await store.handleEvent(mkAddEvent(MessageFlag.read, [], all: true)); checkNotifiedOnce(); @@ -404,7 +404,7 @@ void main() { }); test('other flags not clobbered', () async { - final message = eg.streamMessage(flags: [MessageFlag.starred]); + final message = eg.channelMessage(flags: [MessageFlag.starred]); await prepare(); await prepareMessages([message]); await store.handleEvent(mkAddEvent(MessageFlag.read, [message.id])); @@ -417,7 +417,7 @@ void main() { group('remove flag', () { test('message is unknown', () async { await prepare(); - final message = eg.streamMessage(flags: [MessageFlag.read]); + final message = eg.channelMessage(flags: [MessageFlag.read]); await prepareMessages([message]); await store.handleEvent(mkAddEvent(MessageFlag.read, [2])); checkNotNotified(); @@ -427,9 +427,9 @@ void main() { test('affected message, unaffected message, absent message', () async { await prepare(); - final message1 = eg.streamMessage(flags: [MessageFlag.read]); - final message2 = eg.streamMessage(flags: [MessageFlag.read]); - final message3 = eg.streamMessage(flags: [MessageFlag.read]); + final message1 = eg.channelMessage(flags: [MessageFlag.read]); + final message2 = eg.channelMessage(flags: [MessageFlag.read]); + final message3 = eg.channelMessage(flags: [MessageFlag.read]); await prepareMessages([message1, message2]); await store.handleEvent(mkRemoveEvent(MessageFlag.read, [message2, message3])); checkNotifiedOnce(); @@ -439,7 +439,7 @@ void main() { }); test('other flags not affected', () async { - final message = eg.streamMessage(flags: [MessageFlag.starred, MessageFlag.read]); + final message = eg.channelMessage(flags: [MessageFlag.starred, MessageFlag.read]); await prepare(); await prepareMessages([message]); await store.handleEvent(mkRemoveEvent(MessageFlag.read, [message])); @@ -452,8 +452,8 @@ void main() { group('handleDeleteMessageEvent', () { test('delete an unknown message', () async { - final message1 = eg.streamMessage(); - final message2 = eg.streamMessage(); + final message1 = eg.channelMessage(); + final message2 = eg.channelMessage(); await prepare(); await prepareMessages([message1]); await store.handleEvent(eg.deleteMessageEvent([message2])); @@ -462,8 +462,8 @@ void main() { }); test('delete messages', () async { - final message1 = eg.streamMessage(); - final message2 = eg.streamMessage(); + final message1 = eg.channelMessage(); + final message2 = eg.channelMessage(); await prepare(); await prepareMessages([message1, message2]); await store.handleEvent(eg.deleteMessageEvent([message1, message2])); @@ -472,9 +472,9 @@ void main() { }); test('delete an unknown message with a known message', () async { - final message1 = eg.streamMessage(); - final message2 = eg.streamMessage(); - final message3 = eg.streamMessage(); + final message1 = eg.channelMessage(); + final message2 = eg.channelMessage(); + final message3 = eg.channelMessage(); await prepare(); await prepareMessages([message1, message2]); await store.handleEvent(eg.deleteMessageEvent([message2, message3])); @@ -485,7 +485,7 @@ void main() { group('handleReactionEvent', () { test('add reaction', () async { - final originalMessage = eg.streamMessage(reactions: []); + final originalMessage = eg.channelMessage(reactions: []); await prepare(); await prepareMessages([originalMessage]); final message = store.messages.values.single; @@ -499,7 +499,7 @@ void main() { }); test('add reaction; message is unknown', () async { - final someMessage = eg.streamMessage(reactions: []); + final someMessage = eg.channelMessage(reactions: []); await prepare(); await prepareMessages([someMessage]); await store.handleEvent( @@ -528,7 +528,7 @@ void main() { final reaction4 = Reaction(reactionType: ReactionType.unicodeEmoji, emojiName: 'hello', emojiCode: '1f44b', userId: 1); - final originalMessage = eg.streamMessage( + final originalMessage = eg.channelMessage( reactions: [reaction2, reaction3, reaction4]); await prepare(); await prepareMessages([originalMessage]); @@ -543,7 +543,7 @@ void main() { }); test('remove reaction; message is unknown', () async { - final someMessage = eg.streamMessage(reactions: [eg.unicodeEmojiReaction]); + final someMessage = eg.channelMessage(reactions: [eg.unicodeEmojiReaction]); await prepare(); await prepareMessages([someMessage]); await store.handleEvent( diff --git a/test/model/narrow_test.dart b/test/model/narrow_test.dart index af75b3e6c2..f8c6540a1c 100644 --- a/test/model/narrow_test.dart +++ b/test/model/narrow_test.dart @@ -9,8 +9,8 @@ import 'narrow_checks.dart'; void main() { group('SendableNarrow', () { - test('ofMessage: stream message', () { - final message = eg.streamMessage(); + test('ofMessage: channel message', () { + final message = eg.channelMessage(); final actual = SendableNarrow.ofMessage(message, selfUserId: eg.selfUser.userId); check(actual).equals(TopicNarrow.ofMessage(message)); }); @@ -25,7 +25,7 @@ void main() { group('TopicNarrow', () { test('ofMessage', () { final stream = eg.stream(); - final message = eg.streamMessage(stream: stream); + final message = eg.channelMessage(stream: stream); final actual = TopicNarrow.ofMessage(message); check(actual).equals(TopicNarrow(stream.streamId, message.topic)); }); @@ -122,9 +122,9 @@ void main() { final narrow123 = DmNarrow(allRecipientIds: [1, 2, 3], selfUserId: 2); Message dm(User from, List to) => eg.dmMessage(from: from, to: to); - final streamMessage = eg.streamMessage(sender: user2); + final channelMessage = eg.channelMessage(sender: user2); - check(narrow2.containsMessage(streamMessage)).isFalse(); + check(narrow2.containsMessage(channelMessage)).isFalse(); check(narrow2.containsMessage(dm(user2, []))).isTrue(); check(narrow2.containsMessage(dm(user1, [user2]))).isFalse(); check(narrow2.containsMessage(dm(user2, [user1]))).isFalse(); @@ -132,7 +132,7 @@ void main() { check(narrow2.containsMessage(dm(user2, [user1, user3]))).isFalse(); check(narrow2.containsMessage(dm(user3, [user1, user2]))).isFalse(); - check(narrow12.containsMessage(streamMessage)).isFalse(); + check(narrow12.containsMessage(channelMessage)).isFalse(); check(narrow12.containsMessage(dm(user2, []))).isFalse(); check(narrow12.containsMessage(dm(user1, [user2]))).isTrue(); check(narrow12.containsMessage(dm(user2, [user1]))).isTrue(); @@ -140,7 +140,7 @@ void main() { check(narrow12.containsMessage(dm(user2, [user1, user3]))).isFalse(); check(narrow12.containsMessage(dm(user3, [user1, user2]))).isFalse(); - check(narrow123.containsMessage(streamMessage)).isFalse(); + check(narrow123.containsMessage(channelMessage)).isFalse(); check(narrow123.containsMessage(dm(user2, []))).isFalse(); check(narrow123.containsMessage(dm(user1, [user2]))).isFalse(); check(narrow123.containsMessage(dm(user2, [user1]))).isFalse(); diff --git a/test/model/recent_dm_conversations_test.dart b/test/model/recent_dm_conversations_test.dart index f66b38c633..3cb7de3092 100644 --- a/test/model/recent_dm_conversations_test.dart +++ b/test/model/recent_dm_conversations_test.dart @@ -61,12 +61,12 @@ void main() { ..latestMessagesByRecipient.deepEquals({1: 200, 2: 100}); }); - test('stream message -> do nothing', () { + test('channel message -> do nothing', () { bool listenersNotified = false; final expected = setupView(); check(setupView() ..addListener(() { listenersNotified = true; }) - ..handleMessageEvent(MessageEvent(id: 1, message: eg.streamMessage())) + ..handleMessageEvent(MessageEvent(id: 1, message: eg.channelMessage())) ) ..map.deepEquals(expected.map) ..sorted.deepEquals(expected.sorted) ..latestMessagesByRecipient.deepEquals(expected.latestMessagesByRecipient); diff --git a/test/model/recent_senders_test.dart b/test/model/recent_senders_test.dart index 9d8748afbf..03d7c90b02 100644 --- a/test/model/recent_senders_test.dart +++ b/test/model/recent_senders_test.dart @@ -40,11 +40,11 @@ void main() { }); group('RecentSenders.handleMessage', () { - test('stream message gets included', () { + test('channel message gets included', () { final model = RecentSenders(); - final streamMessage = eg.streamMessage(); - model.handleMessage(streamMessage); - checkMatchesMessages(model, [streamMessage]); + final channelMessage = eg.channelMessage(); + model.handleMessage(channelMessage); + checkMatchesMessages(model, [channelMessage]); }); test('DM message gets ignored', () { @@ -81,10 +81,10 @@ void main() { void checkHandleMessagesSingle(List oldIds, List newIds) { checkHandleMessages([ for (final id in oldIds) - eg.streamMessage(stream: streamA, topic: 'a', sender: userX, id: id), + eg.channelMessage(stream: streamA, topic: 'a', sender: userX, id: id), ], [ for (final id in newIds) - eg.streamMessage(stream: streamA, topic: 'a', sender: userX, id: id), + eg.channelMessage(stream: streamA, topic: 'a', sender: userX, id: id), ]); } @@ -105,39 +105,39 @@ void main() { }); }); - test('batch with both DM and stream messages -> ignores DM, processes stream messages', () { + test('batch with both DM and channel messages -> ignores DM, processes channel messages', () { checkHandleMessages([], [ - eg.streamMessage(stream: streamA, topic: 'thing', sender: userX), + eg.channelMessage(stream: streamA, topic: 'thing', sender: userX), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser]), - eg.streamMessage(stream: streamA, topic: 'thing', sender: userX), + eg.channelMessage(stream: streamA, topic: 'thing', sender: userX), ]); }); test('add new sender', () { checkHandleMessages( - [eg.streamMessage(stream: streamA, topic: 'thing', sender: userX)], - [eg.streamMessage(stream: streamA, topic: 'thing', sender: userY)]); + [eg.channelMessage(stream: streamA, topic: 'thing', sender: userX)], + [eg.channelMessage(stream: streamA, topic: 'thing', sender: userY)]); }); test('add new topic', () { checkHandleMessages( - [eg.streamMessage(stream: streamA, topic: 'thing', sender: userX)], - [eg.streamMessage(stream: streamA, topic: 'other', sender: userX)]); + [eg.channelMessage(stream: streamA, topic: 'thing', sender: userX)], + [eg.channelMessage(stream: streamA, topic: 'other', sender: userX)]); }); test('add new stream', () { checkHandleMessages( - [eg.streamMessage(stream: streamA, topic: 'thing', sender: userX)], - [eg.streamMessage(stream: streamB, topic: 'thing', sender: userX)]); + [eg.channelMessage(stream: streamA, topic: 'thing', sender: userX)], + [eg.channelMessage(stream: streamB, topic: 'thing', sender: userX)]); }); test('multiple conversations and senders interspersed', () { checkHandleMessages([], [ - eg.streamMessage(stream: streamA, topic: 'thing', sender: userX), - eg.streamMessage(stream: streamA, topic: 'other', sender: userX), - eg.streamMessage(stream: streamB, topic: 'thing', sender: userX), - eg.streamMessage(stream: streamA, topic: 'thing', sender: userY), - eg.streamMessage(stream: streamA, topic: 'thing', sender: userX), + eg.channelMessage(stream: streamA, topic: 'thing', sender: userX), + eg.channelMessage(stream: streamA, topic: 'other', sender: userX), + eg.channelMessage(stream: streamB, topic: 'thing', sender: userX), + eg.channelMessage(stream: streamA, topic: 'thing', sender: userY), + eg.channelMessage(stream: streamA, topic: 'thing', sender: userX), ]); }); }); @@ -149,9 +149,9 @@ void main() { final userY = eg.user(); final messages = [ - eg.streamMessage(stream: stream, topic: 'thing', sender: userX), - eg.streamMessage(stream: stream, topic: 'other', sender: userX), - eg.streamMessage(stream: stream, topic: 'thing', sender: userY), + eg.channelMessage(stream: stream, topic: 'thing', sender: userX), + eg.channelMessage(stream: stream, topic: 'other', sender: userX), + eg.channelMessage(stream: stream, topic: 'thing', sender: userY), ]; model.handleMessages(messages); @@ -169,9 +169,9 @@ void main() { final user10 = eg.user(userId: 10); final messages = [ - eg.streamMessage(stream: stream1, sender: user10, id: 100), - eg.streamMessage(stream: stream1, sender: user10, id: 200), - eg.streamMessage(stream: stream1, sender: user10, id: 300), + eg.channelMessage(stream: stream1, sender: user10, id: 100), + eg.channelMessage(stream: stream1, sender: user10, id: 200), + eg.channelMessage(stream: stream1, sender: user10, id: 300), ]; model.handleMessages(messages); @@ -192,8 +192,8 @@ void main() { final user10 = eg.user(userId: 10); final messages = [ - eg.streamMessage(stream: stream1, topic: 'a', sender: user10, id: 200), - eg.streamMessage(stream: stream1, topic: 'a', sender: user10, id: 300), + eg.channelMessage(stream: stream1, topic: 'a', sender: user10, id: 200), + eg.channelMessage(stream: stream1, topic: 'a', sender: user10, id: 300), ]; model.handleMessages(messages); diff --git a/test/model/unreads_test.dart b/test/model/unreads_test.dart index b05d8b8c9c..cd505d0b4a 100644 --- a/test/model/unreads_test.dart +++ b/test/model/unreads_test.dart @@ -131,14 +131,14 @@ void main() { oldUnreadsMissing: false, )); checkMatchesMessages([ - eg.streamMessage(id: 1, stream: stream1, topic: 'a', flags: []), - eg.streamMessage(id: 2, stream: stream1, topic: 'a', flags: []), - eg.streamMessage(id: 3, stream: stream1, topic: 'b', flags: []), - eg.streamMessage(id: 4, stream: stream1, topic: 'b', flags: []), - eg.streamMessage(id: 5, stream: stream2, topic: 'b', flags: []), - eg.streamMessage(id: 6, stream: stream2, topic: 'b', flags: [MessageFlag.mentioned]), - eg.streamMessage(id: 7, stream: stream2, topic: 'c', flags: []), - eg.streamMessage(id: 8, stream: stream2, topic: 'c', flags: []), + eg.channelMessage(id: 1, stream: stream1, topic: 'a', flags: []), + eg.channelMessage(id: 2, stream: stream1, topic: 'a', flags: []), + eg.channelMessage(id: 3, stream: stream1, topic: 'b', flags: []), + eg.channelMessage(id: 4, stream: stream1, topic: 'b', flags: []), + eg.channelMessage(id: 5, stream: stream2, topic: 'b', flags: []), + eg.channelMessage(id: 6, stream: stream2, topic: 'b', flags: [MessageFlag.mentioned]), + eg.channelMessage(id: 7, stream: stream2, topic: 'c', flags: []), + eg.channelMessage(id: 8, stream: stream2, topic: 'c', flags: []), eg.dmMessage(id: 9, from: user1, to: [eg.selfUser], flags: []), eg.dmMessage(id: 10, from: user1, to: [eg.selfUser], flags: []), eg.dmMessage(id: 11, from: user2, to: [eg.selfUser], flags: []), @@ -163,11 +163,11 @@ void main() { await channelStore.addSubscription(eg.subscription(stream3, isMuted: true)); await channelStore.addUserTopic(stream1, 'a', UserTopicVisibilityPolicy.muted); fillWithMessages([ - eg.streamMessage(stream: stream1, topic: 'a', flags: []), - eg.streamMessage(stream: stream1, topic: 'b', flags: []), - eg.streamMessage(stream: stream1, topic: 'b', flags: []), - eg.streamMessage(stream: stream2, topic: 'c', flags: []), - eg.streamMessage(stream: stream3, topic: 'd', flags: []), + eg.channelMessage(stream: stream1, topic: 'a', flags: []), + eg.channelMessage(stream: stream1, topic: 'b', flags: []), + eg.channelMessage(stream: stream1, topic: 'b', flags: []), + eg.channelMessage(stream: stream2, topic: 'c', flags: []), + eg.channelMessage(stream: stream3, topic: 'd', flags: []), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: []), eg.dmMessage(from: eg.thirdUser, to: [eg.selfUser], flags: []), ]); @@ -182,12 +182,12 @@ void main() { await channelStore.addUserTopic(stream, 'a', UserTopicVisibilityPolicy.unmuted); await channelStore.addUserTopic(stream, 'c', UserTopicVisibilityPolicy.muted); fillWithMessages([ - eg.streamMessage(stream: stream, topic: 'a', flags: []), - eg.streamMessage(stream: stream, topic: 'a', flags: []), - eg.streamMessage(stream: stream, topic: 'b', flags: []), - eg.streamMessage(stream: stream, topic: 'b', flags: []), - eg.streamMessage(stream: stream, topic: 'b', flags: []), - eg.streamMessage(stream: stream, topic: 'c', flags: []), + eg.channelMessage(stream: stream, topic: 'a', flags: []), + eg.channelMessage(stream: stream, topic: 'a', flags: []), + eg.channelMessage(stream: stream, topic: 'b', flags: []), + eg.channelMessage(stream: stream, topic: 'b', flags: []), + eg.channelMessage(stream: stream, topic: 'b', flags: []), + eg.channelMessage(stream: stream, topic: 'c', flags: []), ]); check(model.countInChannel (stream.streamId)).equals(5); check(model.countInChannelNarrow(stream.streamId)).equals(5); @@ -202,7 +202,7 @@ void main() { test('countInTopicNarrow', () { final stream = eg.stream(); prepare(); - fillWithMessages(List.generate(7, (i) => eg.streamMessage( + fillWithMessages(List.generate(7, (i) => eg.channelMessage( stream: stream, topic: 'a', flags: []))); check(model.countInTopicNarrow(stream.streamId, 'a')).equals(7); }); @@ -250,7 +250,7 @@ void main() { if (isWildcardMentioned) MessageFlag.wildcardMentioned, ]; final message = isStream - ? eg.streamMessage(flags: flags) + ? eg.channelMessage(flags: flags) : eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: flags); model.handleMessageEvent(MessageEvent(id: 0, message: message)); if (isUnread) { @@ -260,7 +260,7 @@ void main() { }); } - group('stream messages', () { + group('channel messages', () { group('new unread follows existing unread', () { final stream1 = eg.stream(streamId: 1); final stream2 = eg.stream(streamId: 2); @@ -275,8 +275,8 @@ void main() { oldTopic == newTopic ? 'same topic' : 'different topic', ].join(' / '); test(description, () { - final oldMessage = eg.streamMessage(stream: oldStream, topic: oldTopic, flags: []); - final newMessage = eg.streamMessage(stream: newStream, topic: newTopic, flags: []); + final oldMessage = eg.channelMessage(stream: oldStream, topic: oldTopic, flags: []); + final newMessage = eg.channelMessage(stream: newStream, topic: newTopic, flags: []); prepare(); fillWithMessages([oldMessage]); @@ -337,7 +337,7 @@ void main() { for (final isRead in [false, true]) { final baseFlags = [if (isRead) MessageFlag.read]; for (final (messageDesc, message) in [ - ('stream', eg.streamMessage(flags: baseFlags)), + ('stream', eg.channelMessage(flags: baseFlags)), ('1:1 dm', eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: baseFlags)), ]) { test('${isRead ? 'read' : 'unread'} $messageDesc message${isKnownToModel ? '' : ' (but read state unknown to model)'}', () { @@ -364,7 +364,7 @@ void main() { // see e.g. [oldUnreadsMissing]. When that happens, I think // we won't usually have necessary data (in the event or model) // to make the unread appear in [streams] or [dms] - // if it wasn't there before. However, for stream messages, + // if it wasn't there before. However, for channel messages, // we may have that needed data if this event happens to // signal that the message was moved. // @@ -422,10 +422,10 @@ void main() { final message9 = eg.dmMessage(id: 9, from: eg.otherUser, to: [eg.selfUser, eg.thirdUser], flags: [MessageFlag.mentioned]); final message10 = eg.dmMessage(id: 10, from: eg.otherUser, to: [eg.selfUser, eg.user(userId: 456)], flags: [MessageFlag.mentioned]); - final message11 = eg.streamMessage(id: 11, stream: stream1, topic: 'a', flags: []); - final message12 = eg.streamMessage(id: 12, stream: stream1, topic: 'a', flags: [MessageFlag.mentioned]); - final message13 = eg.streamMessage(id: 13, stream: stream2, topic: 'b', flags: []); - final message14 = eg.streamMessage(id: 14, stream: stream2, topic: 'b', flags: [MessageFlag.mentioned]); + final message11 = eg.channelMessage(id: 11, stream: stream1, topic: 'a', flags: []); + final message12 = eg.channelMessage(id: 12, stream: stream1, topic: 'a', flags: [MessageFlag.mentioned]); + final message13 = eg.channelMessage(id: 13, stream: stream2, topic: 'b', flags: []); + final message14 = eg.channelMessage(id: 14, stream: stream2, topic: 'b', flags: [MessageFlag.mentioned]); final messages = [ message1, message2, message3, message4, message5, @@ -496,8 +496,8 @@ void main() { checkMatchesMessages([]); }); - test('delete read (or unknown) stream message', () { - final message = eg.streamMessage(flags: [MessageFlag.read]); + test('delete read (or unknown) channel message', () { + final message = eg.channelMessage(flags: [MessageFlag.read]); prepare(); // Equivalently, could do: fillWithMessages([message]); @@ -558,7 +558,7 @@ void main() { // That case is indistinguishable from an unread that's unknown to // the model, so we get coverage for that case too. test('remove irrelevant flags; ${isRead ? 'read' : 'unread'} / ${isMentioned ? 'mentioned' : 'not mentioned'}', () { - final message = eg.streamMessage(flags: [ + final message = eg.channelMessage(flags: [ ...irrelevantFlags, if (isRead) MessageFlag.read, if (isMentioned) MessageFlag.mentioned, @@ -589,7 +589,7 @@ void main() { // That case is indistinguishable from an unread that's unknown to // the model, so we get coverage for that case too. test('add irrelevant flags; ${isRead ? 'read' : 'unread'} / ${isMentioned ? 'mentioned' : 'not mentioned'}', () { - final message = eg.streamMessage(flags: [ + final message = eg.channelMessage(flags: [ if (isRead) MessageFlag.read, if (isMentioned) MessageFlag.mentioned, ]); @@ -615,8 +615,8 @@ void main() { // the model, so we get coverage for that case too. test('add flag: ${mentionFlag.name}', () { final messages = [ - eg.streamMessage(flags: []), - eg.streamMessage(flags: [MessageFlag.read]), + eg.channelMessage(flags: []), + eg.channelMessage(flags: [MessageFlag.read]), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: []), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: [MessageFlag.read]), ]; @@ -652,8 +652,8 @@ void main() { // the model, so we get coverage for that case too. test('remove flag: ${mentionFlag.name}', () { final messages = [ - eg.streamMessage(flags: [mentionFlag]), - eg.streamMessage(flags: [mentionFlag, MessageFlag.read]), + eg.channelMessage(flags: [mentionFlag]), + eg.channelMessage(flags: [mentionFlag, MessageFlag.read]), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: [mentionFlag]), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: [mentionFlag, MessageFlag.read]), ]; @@ -686,8 +686,8 @@ void main() { // test should checkNotNotified) test('mark all as read', () { - final message1 = eg.streamMessage(id: 1, flags: []); - final message2 = eg.streamMessage(id: 2, flags: [MessageFlag.mentioned]); + final message1 = eg.channelMessage(id: 1, flags: []); + final message2 = eg.channelMessage(id: 2, flags: [MessageFlag.mentioned]); final message3 = eg.dmMessage(id: 3, from: eg.otherUser, to: [eg.selfUser], flags: []); final message4 = eg.dmMessage(id: 4, from: eg.otherUser, to: [eg.selfUser], flags: [MessageFlag.wildcardMentioned]); final messages = [message1, message2, message3, message4]; @@ -734,10 +734,10 @@ void main() { final message9 = eg.dmMessage(id: 9, from: eg.otherUser, to: [eg.selfUser, eg.thirdUser], flags: [MessageFlag.mentioned]); final message10 = eg.dmMessage(id: 10, from: eg.otherUser, to: [eg.selfUser, eg.user(userId: 456)], flags: [MessageFlag.mentioned]); - final message11 = eg.streamMessage(id: 11, stream: stream1, topic: 'a', flags: []); - final message12 = eg.streamMessage(id: 12, stream: stream1, topic: 'a', flags: [MessageFlag.mentioned]); - final message13 = eg.streamMessage(id: 13, stream: stream2, topic: 'b', flags: []); - final message14 = eg.streamMessage(id: 14, stream: stream2, topic: 'b', flags: [MessageFlag.mentioned]); + final message11 = eg.channelMessage(id: 11, stream: stream1, topic: 'a', flags: []); + final message12 = eg.channelMessage(id: 12, stream: stream1, topic: 'a', flags: [MessageFlag.mentioned]); + final message13 = eg.channelMessage(id: 13, stream: stream2, topic: 'b', flags: []); + final message14 = eg.channelMessage(id: 14, stream: stream2, topic: 'b', flags: [MessageFlag.mentioned]); final messages = [ message1, message2, message3, message4, message5, @@ -805,9 +805,9 @@ void main() { test('on unreads that are unknown to the model', () { final stream = eg.stream(); - final message1 = eg.streamMessage(id: 1, flags: [], stream: stream, topic: 'a'); + final message1 = eg.channelMessage(id: 1, flags: [], stream: stream, topic: 'a'); final message2 = eg.dmMessage(id: 2, flags: [], from: eg.otherUser, to: [eg.selfUser]); - final message3 = eg.streamMessage(id: 3, flags: [], stream: stream, topic: 'a'); + final message3 = eg.channelMessage(id: 3, flags: [], stream: stream, topic: 'a'); final message4 = eg.dmMessage(id: 4, flags: [], from: eg.otherUser, to: [eg.selfUser]); prepare(); @@ -846,10 +846,10 @@ void main() { final message9 = eg.dmMessage(id: 9, from: eg.otherUser, to: [eg.selfUser, eg.thirdUser], flags: [MessageFlag.mentioned, MessageFlag.read]); final message10 = eg.dmMessage(id: 10, from: eg.otherUser, to: [eg.selfUser, eg.user(userId: 456)], flags: [MessageFlag.mentioned, MessageFlag.read]); - final message11 = eg.streamMessage(id: 11, stream: stream1, topic: 'a', flags: [MessageFlag.read]); - final message12 = eg.streamMessage(id: 12, stream: stream1, topic: 'a', flags: [MessageFlag.mentioned, MessageFlag.read]); - final message13 = eg.streamMessage(id: 13, stream: stream2, topic: 'b', flags: [MessageFlag.read]); - final message14 = eg.streamMessage(id: 14, stream: stream2, topic: 'b', flags: [MessageFlag.mentioned, MessageFlag.read]); + final message11 = eg.channelMessage(id: 11, stream: stream1, topic: 'a', flags: [MessageFlag.read]); + final message12 = eg.channelMessage(id: 12, stream: stream1, topic: 'a', flags: [MessageFlag.mentioned, MessageFlag.read]); + final message13 = eg.channelMessage(id: 13, stream: stream2, topic: 'b', flags: [MessageFlag.read]); + final message14 = eg.channelMessage(id: 14, stream: stream2, topic: 'b', flags: [MessageFlag.mentioned, MessageFlag.read]); final messages = [ message1, message2, message3, message4, message5, @@ -895,10 +895,10 @@ void main() { checkMatchesMessages(messages); }); - test('tolerates unsorted event.messages: stream messages', () { + test('tolerates unsorted event.messages: channel messages', () { final stream = eg.stream(); - final message1 = eg.streamMessage(id: 1, flags: [MessageFlag.read], stream: stream, topic: 'a'); - final message2 = eg.streamMessage(id: 2, flags: [MessageFlag.read], stream: stream, topic: 'a'); + final message1 = eg.channelMessage(id: 1, flags: [MessageFlag.read], stream: stream, topic: 'a'); + final message2 = eg.channelMessage(id: 2, flags: [MessageFlag.read], stream: stream, topic: 'a'); prepare(); fillWithMessages([message1, message2]); @@ -927,8 +927,8 @@ void main() { }); // TODO(server-6) remove mention of zulip/zulip#22164, fixed in 6.0 - test('tolerates event pointing to DM/stream messages that are already unread (zulip/zulip#22164)', () { - final message1 = eg.streamMessage(id: 1, flags: []); + test('tolerates event pointing to DM/channel messages that are already unread (zulip/zulip#22164)', () { + final message1 = eg.channelMessage(id: 1, flags: []); final message2 = eg.dmMessage(id: 2, from: eg.otherUser, to: [eg.selfUser], flags: []); prepare(); @@ -945,8 +945,8 @@ void main() { test('tolerates "message details" missing', () { final stream = eg.stream(); const topic = 'a'; - final message1 = eg.streamMessage(id: 1, flags: [MessageFlag.read], stream: stream, topic: topic); - final message2 = eg.streamMessage(id: 2, flags: [MessageFlag.read], stream: stream, topic: topic); + final message1 = eg.channelMessage(id: 1, flags: [MessageFlag.read], stream: stream, topic: topic); + final message2 = eg.channelMessage(id: 2, flags: [MessageFlag.read], stream: stream, topic: topic); final message3 = eg.dmMessage(id: 3, flags: [MessageFlag.read], from: eg.otherUser, to: [eg.selfUser]); final message4 = eg.dmMessage(id: 4, flags: [MessageFlag.read], from: eg.otherUser, to: [eg.selfUser]); diff --git a/test/notifications/display_test.dart b/test/notifications/display_test.dart index d65eb2b558..4debd9cebe 100644 --- a/test/notifications/display_test.dart +++ b/test/notifications/display_test.dart @@ -233,25 +233,25 @@ void main() { async.flushMicrotasks(); } - test('stream message', () => runWithHttpClient(() => awaitFakeAsync((async) async { + test('channel message', () => runWithHttpClient(() => awaitFakeAsync((async) async { await init(); final stream = eg.stream(); - final message = eg.streamMessage(stream: stream); + final message = eg.channelMessage(stream: stream); await checkNotifications(async, messageFcmMessage(message, streamName: stream.name), expectedIsGroupConversation: true, expectedTitle: '#${stream.name} > ${message.topic}', expectedTagComponent: 'stream:${message.streamId}:${message.topic}'); }))); - test('stream message: multiple messages, same topic', () => runWithHttpClient(() => awaitFakeAsync((async) async { + test('channel message: multiple messages, same topic', () => runWithHttpClient(() => awaitFakeAsync((async) async { await init(); final stream = eg.stream(); const topic = 'topic 1'; - final message1 = eg.streamMessage(topic: topic, stream: stream); + final message1 = eg.channelMessage(topic: topic, stream: stream); final data1 = messageFcmMessage(message1, streamName: stream.name); - final message2 = eg.streamMessage(topic: topic, stream: stream); + final message2 = eg.channelMessage(topic: topic, stream: stream); final data2 = messageFcmMessage(message2, streamName: stream.name); - final message3 = eg.streamMessage(topic: topic, stream: stream); + final message3 = eg.channelMessage(topic: topic, stream: stream); final data3 = messageFcmMessage(message3, streamName: stream.name); final expectedTitle = '#${stream.name} > $topic'; @@ -279,16 +279,16 @@ void main() { expectedTagComponent: expectedTagComponent); }))); - test('stream message: multiple messages, different topics', () => runWithHttpClient(() => awaitFakeAsync((async) async { + test('channel message: multiple messages, different topics', () => runWithHttpClient(() => awaitFakeAsync((async) async { await init(); final stream = eg.stream(); const topicA = 'topic A'; const topicB = 'topic B'; - final message1 = eg.streamMessage(topic: topicA, stream: stream); + final message1 = eg.channelMessage(topic: topicA, stream: stream); final data1 = messageFcmMessage(message1, streamName: stream.name); - final message2 = eg.streamMessage(topic: topicB, stream: stream); + final message2 = eg.channelMessage(topic: topicB, stream: stream); final data2 = messageFcmMessage(message2, streamName: stream.name); - final message3 = eg.streamMessage(topic: topicA, stream: stream); + final message3 = eg.channelMessage(topic: topicA, stream: stream); final data3 = messageFcmMessage(message3, streamName: stream.name); await receiveFcmMessage(async, data1); @@ -313,11 +313,11 @@ void main() { expectedTagComponent: 'stream:${stream.streamId}:$topicA'); }))); - test('stream message: conversation stays same when stream is renamed', () => runWithHttpClient(() => awaitFakeAsync((async) async { + test('channel message: conversation stays same when stream is renamed', () => runWithHttpClient(() => awaitFakeAsync((async) async { await init(); var stream = eg.stream(streamId: 1, name: 'Before'); const topic = 'topic'; - final message1 = eg.streamMessage(topic: topic, stream: stream); + final message1 = eg.channelMessage(topic: topic, stream: stream); final data1 = messageFcmMessage(message1, streamName: stream.name); await receiveFcmMessage(async, data1); @@ -328,7 +328,7 @@ void main() { expectedTagComponent: 'stream:${stream.streamId}:$topic'); stream = eg.stream(streamId: 1, name: 'After'); - final message2 = eg.streamMessage(topic: topic, stream: stream); + final message2 = eg.channelMessage(topic: topic, stream: stream); final data2 = messageFcmMessage(message2, streamName: stream.name); await receiveFcmMessage(async, data2); @@ -339,10 +339,10 @@ void main() { expectedTagComponent: 'stream:${stream.streamId}:$topic'); }))); - test('stream message: stream name omitted', () => runWithHttpClient(() => awaitFakeAsync((async) async { + test('channel message: stream name omitted', () => runWithHttpClient(() => awaitFakeAsync((async) async { await init(); final stream = eg.stream(); - final message = eg.streamMessage(stream: stream); + final message = eg.channelMessage(stream: stream); await checkNotifications(async, messageFcmMessage(message, streamName: null), expectedIsGroupConversation: true, expectedTitle: '#(unknown channel) > ${message.topic}', @@ -556,10 +556,10 @@ void main() { pushedRoutes.clear(); } - testWidgets('stream message', (tester) async { + testWidgets('channel message', (tester) async { testBinding.globalStore.add(eg.selfAccount, eg.initialSnapshot()); await prepare(tester); - await checkOpenNotification(tester, eg.selfAccount, eg.streamMessage()); + await checkOpenNotification(tester, eg.selfAccount, eg.channelMessage()); }); testWidgets('direct message', (tester) async { @@ -571,14 +571,14 @@ void main() { testWidgets('no accounts', (tester) async { await prepare(tester, withAccount: false); - await openNotification(tester, eg.selfAccount, eg.streamMessage()); + await openNotification(tester, eg.selfAccount, eg.channelMessage()); check(pushedRoutes).isEmpty(); }); testWidgets('mismatching account', (tester) async { testBinding.globalStore.add(eg.selfAccount, eg.initialSnapshot()); await prepare(tester); - await openNotification(tester, eg.otherAccount, eg.streamMessage()); + await openNotification(tester, eg.otherAccount, eg.channelMessage()); check(pushedRoutes).isEmpty(); }); @@ -598,16 +598,16 @@ void main() { } await prepare(tester); - await checkOpenNotification(tester, accounts[0], eg.streamMessage()); - await checkOpenNotification(tester, accounts[1], eg.streamMessage()); - await checkOpenNotification(tester, accounts[2], eg.streamMessage()); - await checkOpenNotification(tester, accounts[3], eg.streamMessage()); + await checkOpenNotification(tester, accounts[0], eg.channelMessage()); + await checkOpenNotification(tester, accounts[1], eg.channelMessage()); + await checkOpenNotification(tester, accounts[2], eg.channelMessage()); + await checkOpenNotification(tester, accounts[3], eg.channelMessage()); }); testWidgets('wait for app to become ready', (tester) async { testBinding.globalStore.add(eg.selfAccount, eg.initialSnapshot()); await prepare(tester, early: true); - final message = eg.streamMessage(); + final message = eg.channelMessage(); await openNotification(tester, eg.selfAccount, message); // The app should still not be ready (or else this test won't work right). check(ZulipApp.ready.value).isFalse(); @@ -626,7 +626,7 @@ void main() { testWidgets('at app launch', (tester) async { // Set up a value for `getNotificationLaunchDetails` to return. final account = eg.selfAccount; - final message = eg.streamMessage(); + final message = eg.channelMessage(); final response = NotificationResponse( notificationResponseType: NotificationResponseType.selectedNotification, payload: jsonEncode(messageFcmMessage(message, account: account))); diff --git a/test/widgets/action_sheet_test.dart b/test/widgets/action_sheet_test.dart index 00e7b491c3..ae17a05328 100644 --- a/test/widgets/action_sheet_test.dart +++ b/test/widgets/action_sheet_test.dart @@ -83,7 +83,7 @@ void main() { // TODO: Message should really only differ from `message` // in its content / content_type, not in `id` or anything else. (store.connection as FakeApiConnection).prepare(delay: delay, json: - GetMessageResult(message: eg.streamMessage(contentMarkdown: rawContent)).toJson()); + GetMessageResult(message: eg.channelMessage(contentMarkdown: rawContent)).toJson()); } void prepareRawContentResponseError(PerAccountStore store) { @@ -103,7 +103,7 @@ void main() { } testWidgets('success', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -123,7 +123,7 @@ void main() { }); testWidgets('request has an error', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -157,7 +157,7 @@ void main() { } testWidgets('star success', (WidgetTester tester) async { - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -177,7 +177,7 @@ void main() { }); testWidgets('unstar success', (WidgetTester tester) async { - final message = eg.streamMessage(flags: [MessageFlag.starred]); + final message = eg.channelMessage(flags: [MessageFlag.starred]); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -197,7 +197,7 @@ void main() { }); testWidgets('star request has an error', (WidgetTester tester) async { - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); final zulipLocalizations = GlobalLocalizations.zulipLocalizations; @@ -218,7 +218,7 @@ void main() { }); testWidgets('unstar request has an error', (WidgetTester tester) async { - final message = eg.streamMessage(flags: [MessageFlag.starred]); + final message = eg.channelMessage(flags: [MessageFlag.starred]); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); final zulipLocalizations = GlobalLocalizations.zulipLocalizations; @@ -289,7 +289,7 @@ void main() { } testWidgets('in channel narrow', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: ChannelNarrow(message.streamId)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -307,7 +307,7 @@ void main() { }); testWidgets('in topic narrow', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -344,7 +344,7 @@ void main() { }); testWidgets('request has an error', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -373,7 +373,7 @@ void main() { }); testWidgets('not offered in CombinedFeedNarrow (composing to reply is not yet supported)', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: const CombinedFeedNarrow()); check(findQuoteAndReplyButton(tester)).isNull(); }); @@ -394,7 +394,7 @@ void main() { } testWidgets('success', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -408,7 +408,7 @@ void main() { // Regression test for: https://github.com/zulip/zulip-flutter/issues/732 testBinding.deviceInfoResult = const IosDeviceInfo(systemVersion: '16.0'); - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -430,7 +430,7 @@ void main() { }); testWidgets('request has an error', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -461,7 +461,7 @@ void main() { } testWidgets('copies message link to clipboard', (tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); final narrow = TopicNarrow.ofMessage(message); await setupToMessageActionSheet(tester, message: message, narrow: narrow); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -492,7 +492,7 @@ void main() { testWidgets('request succeeds; sharing succeeds', (WidgetTester tester) async { final mockSharePlus = setupMockSharePlus(); - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -504,7 +504,7 @@ void main() { testWidgets('request succeeds; sharing fails', (WidgetTester tester) async { final mockSharePlus = setupMockSharePlus(); - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -520,7 +520,7 @@ void main() { testWidgets('request has an error', (WidgetTester tester) async { final mockSharePlus = setupMockSharePlus(); - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); diff --git a/test/widgets/actions_test.dart b/test/widgets/actions_test.dart index b315b80037..bf4e424742 100644 --- a/test/widgets/actions_test.dart +++ b/test/widgets/actions_test.dart @@ -45,7 +45,7 @@ void main() { } testWidgets('smoke test on modern server', (tester) async { - final narrow = TopicNarrow.ofMessage(eg.streamMessage()); + final narrow = TopicNarrow.ofMessage(eg.channelMessage()); await prepare(tester); connection.prepare(json: UpdateMessageFlagsForNarrowResult( processedCount: 11, updatedCount: 3, @@ -95,7 +95,7 @@ void main() { testWidgets('pagination', (WidgetTester tester) async { // Check that `lastProcessedId` returned from an initial // response is used as `anchorId` for the subsequent request. - final narrow = TopicNarrow.ofMessage(eg.streamMessage()); + final narrow = TopicNarrow.ofMessage(eg.channelMessage()); await prepare(tester); connection.prepare(json: UpdateMessageFlagsForNarrowResult( @@ -155,7 +155,7 @@ void main() { testWidgets('on invalid response', (WidgetTester tester) async { final zulipLocalizations = GlobalLocalizations.zulipLocalizations; - final narrow = TopicNarrow.ofMessage(eg.streamMessage()); + final narrow = TopicNarrow.ofMessage(eg.channelMessage()); await prepare(tester); connection.prepare(json: UpdateMessageFlagsForNarrowResult( processedCount: 1000, updatedCount: 0, @@ -220,7 +220,7 @@ void main() { }); testWidgets('TopicNarrow on legacy server', (WidgetTester tester) async { - final narrow = TopicNarrow.ofMessage(eg.streamMessage()); + final narrow = TopicNarrow.ofMessage(eg.channelMessage()); await prepare(tester); connection.zulipFeatureLevel = 154; connection.prepare(json: {}); diff --git a/test/widgets/compose_box_test.dart b/test/widgets/compose_box_test.dart index 8152cd5c40..d359638207 100644 --- a/test/widgets/compose_box_test.dart +++ b/test/widgets/compose_box_test.dart @@ -176,7 +176,7 @@ void main() { testWidgets('_FixedDestinationComposeBox', (tester) async { final key = await prepareComposeBox(tester, - TopicNarrow.ofMessage(eg.streamMessage())); + TopicNarrow.ofMessage(eg.channelMessage())); checkComposeBoxTextFields(tester, controllerKey: key, expectTopicTextField: false); }); diff --git a/test/widgets/content_test.dart b/test/widgets/content_test.dart index b62dd7502d..286feac437 100644 --- a/test/widgets/content_test.dart +++ b/test/widgets/content_test.dart @@ -105,7 +105,7 @@ void main() { } Widget messageContent(String html) { - return MessageContent(message: eg.streamMessage(content: html), + return MessageContent(message: eg.channelMessage(content: html), content: parseContent(html)); } diff --git a/test/widgets/emoji_reaction_test.dart b/test/widgets/emoji_reaction_test.dart index fa96d1426e..5070b6ed60 100644 --- a/test/widgets/emoji_reaction_test.dart +++ b/test/widgets/emoji_reaction_test.dart @@ -43,7 +43,7 @@ void main() { required List reactions, double width = 245.0, // (seen in context on an iPhone 13 Pro) }) async { - final message = eg.streamMessage(reactions: reactions); + final message = eg.channelMessage(reactions: reactions); await tester.pumpWidget(TestZulipApp(accountId: eg.selfAccount.id, child: Center( diff --git a/test/widgets/inbox_test.dart b/test/widgets/inbox_test.dart index 178aac413a..f19c1fadf0 100644 --- a/test/widgets/inbox_test.dart +++ b/test/widgets/inbox_test.dart @@ -87,7 +87,7 @@ void main() { required int count, required List flags, }) { - return List.generate(count, (index) => eg.streamMessage( + return List.generate(count, (index) => eg.channelMessage( stream: stream, topic: '${stream.name} topic $index', flags: flags)); } @@ -103,9 +103,9 @@ void main() { subscriptions: [sub1, sub2], users: [eg.selfUser, eg.otherUser, eg.thirdUser, eg.fourthUser], unreadMessages: [ - eg.streamMessage(stream: stream1, topic: 'specific topic', flags: []), + eg.channelMessage(stream: stream1, topic: 'specific topic', flags: []), ...generateChannelMessages(stream: stream1, count: 10, flags: []), - eg.streamMessage(stream: stream2, flags: []), + eg.channelMessage(stream: stream2, flags: []), ...generateChannelMessages(stream: stream2, count: 40, flags: []), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser], flags: []), eg.dmMessage(from: eg.otherUser, to: [eg.selfUser, eg.thirdUser], flags: []), @@ -200,7 +200,7 @@ void main() { await setupPage(tester, streams: [stream], subscriptions: [subscription], - unreadMessages: [eg.streamMessage(stream: stream, topic: 'lunch')]); + unreadMessages: [eg.channelMessage(stream: stream, topic: 'lunch')]); check(tester.widgetList(find.text('lunch'))).length.equals(1); }); @@ -210,7 +210,7 @@ void main() { await setupPage(tester, streams: [stream], subscriptions: [subscription], - unreadMessages: [eg.streamMessage(stream: stream, topic: 'lunch')]); + unreadMessages: [eg.channelMessage(stream: stream, topic: 'lunch')]); await store.addUserTopic(stream, 'lunch', UserTopicVisibilityPolicy.muted); await tester.pump(); check(tester.widgetList(find.text('lunch'))).length.equals(0); @@ -222,7 +222,7 @@ void main() { await setupPage(tester, streams: [stream], subscriptions: [subscription], - unreadMessages: [eg.streamMessage(stream: stream, topic: 'lunch')]); + unreadMessages: [eg.channelMessage(stream: stream, topic: 'lunch')]); check(tester.widgetList(find.text('lunch'))).length.equals(0); }); @@ -232,7 +232,7 @@ void main() { await setupPage(tester, streams: [stream], subscriptions: [subscription], - unreadMessages: [eg.streamMessage(stream: stream, topic: 'lunch')]); + unreadMessages: [eg.channelMessage(stream: stream, topic: 'lunch')]); await store.addUserTopic(stream, 'lunch', UserTopicVisibilityPolicy.unmuted); await tester.pump(); check(tester.widgetList(find.text('lunch'))).length.equals(1); @@ -256,7 +256,7 @@ void main() { await setupPage(tester, streams: [stream], subscriptions: [subscription], - unreadMessages: [eg.streamMessage(stream: stream, topic: topic, + unreadMessages: [eg.channelMessage(stream: stream, topic: topic, flags: [MessageFlag.mentioned])]); check(hasAtSign(tester, findStreamHeaderRow(tester, stream.streamId))) @@ -268,7 +268,7 @@ void main() { await setupPage(tester, streams: [stream], subscriptions: [subscription], - unreadMessages: [eg.streamMessage(stream: stream, topic: topic, + unreadMessages: [eg.channelMessage(stream: stream, topic: topic, flags: [])]); check(hasAtSign(tester, findStreamHeaderRow(tester, stream.streamId))) @@ -476,7 +476,7 @@ void main() { await setupPage(tester, streams: [stream], subscriptions: [eg.subscription(stream, color: initialColor)], - unreadMessages: [eg.streamMessage(stream: stream, topic: 'specific topic', flags: [])]); + unreadMessages: [eg.channelMessage(stream: stream, topic: 'specific topic', flags: [])]); checkAppearsUncollapsed(tester, stream.streamId, find.text('specific topic')); diff --git a/test/widgets/lightbox_test.dart b/test/widgets/lightbox_test.dart index 1473c90287..91557a080c 100644 --- a/test/widgets/lightbox_test.dart +++ b/test/widgets/lightbox_test.dart @@ -215,7 +215,7 @@ void main() { final navigator = await ZulipApp.navigator; navigator.push(getImageLightboxRoute( accountId: eg.selfAccount.id, - message: message ?? eg.streamMessage(), + message: message ?? eg.channelMessage(), src: src, thumbnailUrl: thumbnailUrl, originalHeight: null, @@ -239,7 +239,7 @@ void main() { testWidgets('app bar shows sender name and date', (tester) async { prepareBoringImageHttpClient(); final timestamp = DateTime.parse("2024-07-23 23:12:24").millisecondsSinceEpoch ~/ 1000; - final message = eg.streamMessage(sender: eg.otherUser, timestamp: timestamp); + final message = eg.channelMessage(sender: eg.otherUser, timestamp: timestamp); await setupPage(tester, message: message, thumbnailUrl: null); // We're looking for a RichText, in the app bar, with both the @@ -256,7 +256,7 @@ void main() { testWidgets('header and footer hidden and shown by tapping image', (tester) async { prepareBoringImageHttpClient(); - final message = eg.streamMessage(sender: eg.otherUser); + final message = eg.channelMessage(sender: eg.otherUser); await setupPage(tester, message: message, thumbnailUrl: null); tester.widget(find.byType(AppBar)); @@ -364,7 +364,7 @@ void main() { await tester.pumpWidget(TestZulipApp(accountId: eg.selfAccount.id, child: VideoLightboxPage( routeEntranceAnimation: kAlwaysCompleteAnimation, - message: eg.streamMessage(), + message: eg.channelMessage(), src: videoSrc))); await tester.pump(); // global store await tester.pump(); // per-account store diff --git a/test/widgets/message_list_test.dart b/test/widgets/message_list_test.dart index 15d01f6d35..2cf621e744 100644 --- a/test/widgets/message_list_test.dart +++ b/test/widgets/message_list_test.dart @@ -52,7 +52,7 @@ void main() { UnreadMessagesSnapshot? unreadMsgs, }) async { addTearDown(testBinding.reset); - streams ??= subscriptions ??= [eg.subscription(eg.stream(streamId: eg.defaultStreamMessageStreamId))]; + streams ??= subscriptions ??= [eg.subscription(eg.stream(streamId: eg.defaultChannelMessageStreamId))]; await testBinding.globalStore.add(eg.selfAccount, eg.initialSnapshot( streams: streams, subscriptions: subscriptions, unreadMsgs: unreadMsgs)); store = await testBinding.globalStore.perAccount(eg.selfAccount.id); @@ -63,7 +63,7 @@ void main() { await store.addUsers(users ?? []); assert((messageCount == null) != (messages == null)); messages ??= List.generate(messageCount!, (index) { - return eg.streamMessage(sender: eg.selfUser); + return eg.channelMessage(sender: eg.selfUser); }); connection.prepare(json: newestResult(foundOldest: foundOldest, messages: messages).toJson()); @@ -83,7 +83,7 @@ void main() { group('MessageListPage', () { testWidgets('ancestorOf finds page state from message', (tester) async { await setupMessageListPage(tester, - messages: [eg.streamMessage(content: "

a message

")]); + messages: [eg.channelMessage(content: "

a message

")]); final expectedState = tester.state(find.byType(MessageListPage)); check(MessageListPage.ancestorOf(tester.element(find.text("a message")))) .identicalTo(expectedState as MessageListPageState); @@ -91,7 +91,7 @@ void main() { testWidgets('ancestorOf throws when not a descendant of MessageListPage', (tester) async { await setupMessageListPage(tester, - messages: [eg.streamMessage(content: "

a message

")]); + messages: [eg.channelMessage(content: "

a message

")]); final element = tester.element(find.byType(PerAccountStoreWidget)); check(() => MessageListPage.ancestorOf(element)) .throws(); @@ -100,7 +100,7 @@ void main() { testWidgets('MessageListPageState.narrow', (tester) async { final stream = eg.stream(); await setupMessageListPage(tester, narrow: ChannelNarrow(stream.streamId), - messages: [eg.streamMessage(stream: stream, content: "

a message

")]); + messages: [eg.channelMessage(stream: stream, content: "

a message

")]); final state = MessageListPage.ancestorOf(tester.element(find.text("a message"))); check(state.narrow).equals(ChannelNarrow(stream.streamId)); }); @@ -108,14 +108,14 @@ void main() { testWidgets('composeBoxController finds compose box', (tester) async { final stream = eg.stream(); await setupMessageListPage(tester, narrow: ChannelNarrow(stream.streamId), - messages: [eg.streamMessage(stream: stream, content: "

a message

")]); + messages: [eg.channelMessage(stream: stream, content: "

a message

")]); final state = MessageListPage.ancestorOf(tester.element(find.text("a message"))); check(state.composeBoxController).isNotNull(); }); testWidgets('composeBoxController null when no compose box', (tester) async { await setupMessageListPage(tester, narrow: const CombinedFeedNarrow(), - messages: [eg.streamMessage(content: "

a message

")]); + messages: [eg.channelMessage(content: "

a message

")]); final state = MessageListPage.ancestorOf(tester.element(find.text("a message"))); check(state.composeBoxController).isNull(); }); @@ -129,7 +129,7 @@ void main() { tester.view.padding = fakePadding; await setupMessageListPage(tester, narrow: const CombinedFeedNarrow(), - messages: [eg.streamMessage(content: ContentExample.codeBlockPlain.html)]); + messages: [eg.channelMessage(content: ContentExample.codeBlockPlain.html)]); final element = tester.element(find.byType(CodeBlock)); final padding = MediaQuery.of(element).padding; @@ -145,7 +145,7 @@ void main() { tester.platformDispatcher.platformBrightnessTestValue = Brightness.light; addTearDown(tester.platformDispatcher.clearPlatformBrightnessTestValue); - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupMessageListPage(tester, messages: [message]); Color backgroundColor() { @@ -176,7 +176,7 @@ void main() { testWidgets('basic', (tester) async { await setupMessageListPage(tester, foundOldest: false, - messages: List.generate(300, (i) => eg.streamMessage(id: 950 + i, sender: eg.selfUser))); + messages: List.generate(300, (i) => eg.channelMessage(id: 950 + i, sender: eg.selfUser))); check(itemCount(tester)).equals(303); // Fling-scroll upward... @@ -185,7 +185,7 @@ void main() { // ... and we should fetch more messages as we go. connection.prepare(json: olderResult(anchor: 950, foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 850 + i, sender: eg.selfUser))).toJson()); + messages: List.generate(100, (i) => eg.channelMessage(id: 850 + i, sender: eg.selfUser))).toJson()); await tester.pump(const Duration(seconds: 3)); // Fast-forward to end of fling. await tester.pump(Duration.zero); // Allow a frame for the response to arrive. @@ -195,7 +195,7 @@ void main() { testWidgets('observe double-fetch glitch', (tester) async { await setupMessageListPage(tester, foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 950 + i, sender: eg.selfUser))); + messages: List.generate(100, (i) => eg.channelMessage(id: 950 + i, sender: eg.selfUser))); check(itemCount(tester)).equals(101); // Fling-scroll upward... @@ -204,7 +204,7 @@ void main() { // ... and we fetch more messages as we go. connection.prepare(json: olderResult(anchor: 950, foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 850 + i, sender: eg.selfUser))).toJson()); + messages: List.generate(100, (i) => eg.channelMessage(id: 850 + i, sender: eg.selfUser))).toJson()); for (int i = 0; i < 30; i++) { // Find the point in the fling where the fetch starts. await tester.pump(const Duration(milliseconds: 100)); @@ -216,7 +216,7 @@ void main() { // On the next frame, we promptly fetch *another* batch. // This is a glitch and it'd be nicer if we didn't. connection.prepare(json: olderResult(anchor: 850, foundOldest: false, - messages: List.generate(100, (i) => eg.streamMessage(id: 750 + i, sender: eg.selfUser))).toJson()); + messages: List.generate(100, (i) => eg.channelMessage(id: 750 + i, sender: eg.selfUser))).toJson()); await tester.pump(const Duration(milliseconds: 1)); await tester.pump(Duration.zero); check(itemCount(tester)).equals(301); @@ -226,9 +226,9 @@ void main() { testWidgets("avoid getting distracted by nested viewports' metrics", (tester) async { // Regression test for: https://github.com/zulip/zulip-flutter/issues/507 await setupMessageListPage(tester, foundOldest: false, messages: [ - ...List.generate(300, (i) => eg.streamMessage(id: 1000 + i)), - eg.streamMessage(id: 1301, content: ContentExample.codeBlockPlain.html), - ...List.generate(100, (i) => eg.streamMessage(id: 1302 + i)), + ...List.generate(300, (i) => eg.channelMessage(id: 1000 + i)), + eg.channelMessage(id: 1301, content: ContentExample.codeBlockPlain.html), + ...List.generate(100, (i) => eg.channelMessage(id: 1302 + i)), ]); final lastRequest = connection.lastRequest; check(itemCount(tester)).equals(404); @@ -337,12 +337,12 @@ void main() { from: eg.selfUser, to: [eg.otherUser, eg.thirdUser, eg.fourthUser]); final dmNarrow = DmNarrow.ofMessage(dmMessage, selfUserId: eg.selfUser.userId); - final streamMessage = eg.streamMessage(); - final topicNarrow = TopicNarrow.ofMessage(streamMessage); + final channelMessage = eg.channelMessage(); + final topicNarrow = TopicNarrow.ofMessage(channelMessage); for (final (description, message, narrow) in [ ('typing in dm', dmMessage, dmNarrow), - ('typing in topic', streamMessage, topicNarrow), + ('typing in topic', channelMessage, topicNarrow), ]) { testWidgets(description, (tester) async { await setupMessageListPage(tester, @@ -371,10 +371,10 @@ void main() { } testWidgets('unknown user typing', (tester) async { - final streamMessage = eg.streamMessage(); - final narrow = TopicNarrow.ofMessage(streamMessage); + final channelMessage = eg.channelMessage(); + final narrow = TopicNarrow.ofMessage(channelMessage); await setupMessageListPage(tester, - narrow: narrow, users: [], messages: [streamMessage]); + narrow: narrow, users: [], messages: [channelMessage]); await checkTyping(tester, eg.typingEvent(narrow, TypingOp.start, 1000), expected: '(unknown user) is typing…', @@ -393,7 +393,7 @@ void main() { } testWidgets('from read to unread', (WidgetTester tester) async { - final message = eg.streamMessage(flags: [MessageFlag.read]); + final message = eg.channelMessage(flags: [MessageFlag.read]); await setupMessageListPage(tester, messages: [message]); check(isMarkAsReadButtonVisible(tester)).isFalse(); @@ -404,7 +404,7 @@ void main() { }); testWidgets('from unread to read', (WidgetTester tester) async { - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); final unreadMsgs = eg.unreadMsgs(channels:[ UnreadChannelSnapshot(topic: message.topic, streamId: message.streamId, unreadMessageIds: [message.id]) ]); @@ -422,7 +422,7 @@ void main() { }); testWidgets("messages don't shift position", (WidgetTester tester) async { - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); final unreadMsgs = eg.unreadMsgs(channels:[ UnreadChannelSnapshot(topic: message.topic, streamId: message.streamId, unreadMessageIds: [message.id]) @@ -451,7 +451,7 @@ void main() { // These tests cover functionality that's outside that function, // and a couple of smoke tests showing this button is wired up to it. - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); final unreadMsgs = eg.unreadMsgs(channels: [ UnreadChannelSnapshot(streamId: message.streamId, topic: message.topic, unreadMessageIds: [message.id]), @@ -608,9 +608,9 @@ void main() { }); group('recipient headers', () { - group('StreamMessageRecipientHeader', () { + group('ChannelMessageRecipientHeader', () { final stream = eg.stream(name: 'stream name'); - final message = eg.streamMessage(stream: stream, topic: 'topic name'); + final message = eg.channelMessage(stream: stream, topic: 'topic name'); FinderResult findInMessageList(String text) { // Stream name shows up in [AppBar] so need to avoid matching that @@ -650,12 +650,12 @@ void main() { final subscription = eg.subscription(stream, color: Colors.red.value); final swatch = ChannelColorSwatch.light(subscription.color); await setupMessageListPage(tester, - messages: [eg.streamMessage(stream: subscription)], + messages: [eg.channelMessage(stream: subscription)], subscriptions: [subscription]); await tester.pump(); check(tester.widget( find.descendant( - of: find.byType(StreamMessageRecipientHeader), + of: find.byType(ChannelMessageRecipientHeader), matching: find.byType(ColoredBox), ))).color.equals(swatch.barBackground); }); @@ -665,7 +665,7 @@ void main() { final subscription = eg.subscription(stream, color: Colors.red.value); final swatch = ChannelColorSwatch.light(subscription.color); await setupMessageListPage(tester, - messages: [eg.streamMessage(stream: subscription)], + messages: [eg.channelMessage(stream: subscription)], subscriptions: [subscription]); await tester.pump(); check(tester.widget(find.byIcon(ZulipIcons.globe))) @@ -675,11 +675,11 @@ void main() { testWidgets('normal streams show hash icon', (tester) async { final stream = eg.stream(isWebPublic: false, inviteOnly: false); await setupMessageListPage(tester, - messages: [eg.streamMessage(stream: stream)], + messages: [eg.channelMessage(stream: stream)], subscriptions: [eg.subscription(stream)]); await tester.pump(); check(find.descendant( - of: find.byType(StreamMessageRecipientHeader), + of: find.byType(ChannelMessageRecipientHeader), matching: find.byIcon(ZulipIcons.hash_sign), ).evaluate()).length.equals(1); }); @@ -687,11 +687,11 @@ void main() { testWidgets('public streams show globe icon', (tester) async { final stream = eg.stream(isWebPublic: true); await setupMessageListPage(tester, - messages: [eg.streamMessage(stream: stream)], + messages: [eg.channelMessage(stream: stream)], subscriptions: [eg.subscription(stream)]); await tester.pump(); check(find.descendant( - of: find.byType(StreamMessageRecipientHeader), + of: find.byType(ChannelMessageRecipientHeader), matching: find.byIcon(ZulipIcons.globe), ).evaluate()).length.equals(1); }); @@ -699,11 +699,11 @@ void main() { testWidgets('private streams show lock icon', (tester) async { final stream = eg.stream(inviteOnly: true); await setupMessageListPage(tester, - messages: [eg.streamMessage(stream: stream)], + messages: [eg.channelMessage(stream: stream)], subscriptions: [eg.subscription(stream)]); await tester.pump(); check(find.descendant( - of: find.byType(StreamMessageRecipientHeader), + of: find.byType(ChannelMessageRecipientHeader), matching: find.byIcon(ZulipIcons.lock), ).evaluate()).length.equals(1); }); @@ -712,14 +712,14 @@ void main() { // This can perfectly well happen, because message fetches can race // with events. // … Though not actually with CombinedFeedNarrow, because that shows - // stream messages only in subscribed streams, hence only known streams. + // channel messages only in subscribed streams, hence only known streams. // See skip comment below. final stream = eg.stream(name: 'stream name'); await setupMessageListPage(tester, narrow: const CombinedFeedNarrow(), subscriptions: [], messages: [ - eg.streamMessage(stream: stream), + eg.channelMessage(stream: stream), ]); await tester.pump(); tester.widget(find.text('stream name')); @@ -736,7 +736,7 @@ void main() { narrow: const CombinedFeedNarrow(), subscriptions: [eg.subscription(streamAfter)], messages: [ - eg.streamMessage(stream: streamBefore), + eg.channelMessage(stream: streamBefore), ]); await tester.pump(); tester.widget(find.text('new stream name')); @@ -791,7 +791,7 @@ void main() { testWidgets('show dates', (tester) async { await setupMessageListPage(tester, messages: [ - eg.streamMessage(timestamp: 1671409088), + eg.channelMessage(timestamp: 1671409088), eg.dmMessage(timestamp: 1661219322, from: eg.selfUser, to: []), ]); // We show the dates in the user's timezone. Dart's standard library @@ -904,7 +904,7 @@ void main() { await setupMessageListPage( tester, - messages: users.map((user) => eg.streamMessage(sender: user)).toList(), + messages: users.map((user) => eg.channelMessage(sender: user)).toList(), users: users, ); @@ -918,13 +918,13 @@ void main() { group('Starred messages', () { testWidgets('unstarred message', (WidgetTester tester) async { - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); await setupMessageListPage(tester, messages: [message]); check(find.byIcon(ZulipIcons.star_filled).evaluate()).isEmpty(); }); testWidgets('starred message', (WidgetTester tester) async { - final message = eg.streamMessage(flags: [MessageFlag.starred]); + final message = eg.channelMessage(flags: [MessageFlag.starred]); await setupMessageListPage(tester, messages: [message]); check(find.byIcon(ZulipIcons.star_filled).evaluate()).length.equals(1); }); @@ -937,14 +937,14 @@ void main() { } testWidgets('no edited or moved messages', (WidgetTester tester) async { - final message = eg.streamMessage(); + final message = eg.channelMessage(); await setupMessageListPage(tester, messages: [message]); checkMarkersCount(edited: 0, moved: 0); }); testWidgets('edited and moved messages from events', (WidgetTester tester) async { - final message = eg.streamMessage(); - final message2 = eg.streamMessage(); + final message = eg.channelMessage(); + final message2 = eg.channelMessage(); await setupMessageListPage(tester, messages: [message, message2]); checkMarkersCount(edited: 0, moved: 0); @@ -997,11 +997,11 @@ void main() { testWidgets('edit state updates do not affect layout', (WidgetTester tester) async { final messages = [ - eg.streamMessage(), - eg.streamMessage( + eg.channelMessage(), + eg.channelMessage( reactions: [eg.unicodeEmojiReaction, eg.realmEmojiReaction], flags: [MessageFlag.starred]), - eg.streamMessage(), + eg.channelMessage(), ]; final ChannelMessage messageWithMarker = messages[1]; await setupMessageListPage(tester, messages: messages); @@ -1035,7 +1035,7 @@ void main() { } testWidgets('from read to unread', (WidgetTester tester) async { - final message = eg.streamMessage(flags: [MessageFlag.read]); + final message = eg.channelMessage(flags: [MessageFlag.read]); await setupMessageListPage(tester, messages: [message]); check(getAnimation(tester, message.id)) ..value.equals(0.0) @@ -1055,7 +1055,7 @@ void main() { }); testWidgets('from unread to read', (WidgetTester tester) async { - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); await setupMessageListPage(tester, messages: [message]); check(getAnimation(tester, message.id)) ..value.equals(1.0) @@ -1083,7 +1083,7 @@ void main() { // as the number of items changes in MessageList. See // `findChildIndexCallback` passed into [SliverStickyHeaderList] // at [_MessageListState._buildListView]. - final message = eg.streamMessage(flags: []); + final message = eg.channelMessage(flags: []); await setupMessageListPage(tester, messages: [message]); check(getAnimation(tester, message.id)) ..value.equals(1.0) @@ -1108,7 +1108,7 @@ void main() { ..status.equals(AnimationStatus.forward); // introduce new message - final newMessage = eg.streamMessage(flags:[MessageFlag.read]); + final newMessage = eg.channelMessage(flags:[MessageFlag.read]); await store.handleEvent(MessageEvent(id: 0, message: newMessage)); await tester.pump(); // process handleEvent check(find.byType(MessageItem).evaluate()).length.equals(2);