Skip to content

Commit 41d7918

Browse files
gnpricechrisbobbe
authored andcommitted
message test [nfc]: Move ReactionEvent tests from msglist test file
1 parent 6a14c70 commit 41d7918

File tree

2 files changed

+85
-84
lines changed

2 files changed

+85
-84
lines changed

test/model/message_list_test.dart

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -353,89 +353,6 @@ void main() {
353353
});
354354
});
355355

356-
group('ReactionEvent handling', () {
357-
ReactionEvent mkEvent(Reaction reaction, ReactionOp op, int messageId) {
358-
return ReactionEvent(
359-
id: 1,
360-
op: op,
361-
emojiName: reaction.emojiName,
362-
emojiCode: reaction.emojiCode,
363-
reactionType: reaction.reactionType,
364-
userId: reaction.userId,
365-
messageId: messageId,
366-
);
367-
}
368-
369-
test('add reaction', () async {
370-
final originalMessage = eg.streamMessage(reactions: []);
371-
await prepare();
372-
await prepareMessages(foundOldest: true, messages: [originalMessage]);
373-
final message = store.messages.values.single;
374-
375-
await store.handleEvent(
376-
mkEvent(eg.unicodeEmojiReaction, ReactionOp.add, originalMessage.id));
377-
checkNotifiedOnce();
378-
check(store.messages).values.single
379-
..identicalTo(message)
380-
..reactions.isNotNull().jsonEquals([eg.unicodeEmojiReaction]);
381-
});
382-
383-
test('add reaction; message is not in list', () async {
384-
final someMessage = eg.streamMessage(reactions: []);
385-
await prepare();
386-
await prepareMessages(foundOldest: true, messages: [someMessage]);
387-
await store.handleEvent(
388-
mkEvent(eg.unicodeEmojiReaction, ReactionOp.add, 1000));
389-
checkNotNotified();
390-
check(store.messages).values.single
391-
.reactions.isNull();
392-
});
393-
394-
test('remove reaction', () async {
395-
final eventReaction = Reaction(reactionType: ReactionType.unicodeEmoji,
396-
emojiName: 'wave', emojiCode: '1f44b', userId: 1);
397-
398-
// Same emoji, different user. Not to be removed.
399-
final reaction2 = Reaction(reactionType: ReactionType.unicodeEmoji,
400-
emojiName: 'wave', emojiCode: '1f44b', userId: 2);
401-
402-
// Same user, different emoji. Not to be removed.
403-
final reaction3 = Reaction(reactionType: ReactionType.unicodeEmoji,
404-
emojiName: 'working_on_it', emojiCode: '1f6e0', userId: 1);
405-
406-
// Same user, same emojiCode, different emojiName. To be removed: servers
407-
// key on user, message, reaction type, and emoji code, but not emoji name.
408-
// So we mimic that behavior; see discussion:
409-
// https://github.com/zulip/zulip-flutter/pull/256#discussion_r1284865099
410-
final reaction4 = Reaction(reactionType: ReactionType.unicodeEmoji,
411-
emojiName: 'hello', emojiCode: '1f44b', userId: 1);
412-
413-
final originalMessage = eg.streamMessage(
414-
reactions: [reaction2, reaction3, reaction4]);
415-
await prepare();
416-
await prepareMessages(foundOldest: true, messages: [originalMessage]);
417-
final message = store.messages.values.single;
418-
419-
await store.handleEvent(
420-
mkEvent(eventReaction, ReactionOp.remove, originalMessage.id));
421-
checkNotifiedOnce();
422-
check(store.messages).values.single
423-
..identicalTo(message)
424-
..reactions.isNotNull().jsonEquals([reaction2, reaction3]);
425-
});
426-
427-
test('remove reaction; message is not in list', () async {
428-
final someMessage = eg.streamMessage(reactions: [eg.unicodeEmojiReaction]);
429-
await prepare();
430-
await prepareMessages(foundOldest: true, messages: [someMessage]);
431-
await store.handleEvent(
432-
mkEvent(eg.unicodeEmojiReaction, ReactionOp.remove, 1000));
433-
checkNotNotified();
434-
check(store.messages).values.single
435-
.reactions.isNotNull().jsonEquals([eg.unicodeEmojiReaction]);
436-
});
437-
});
438-
439356
group('maybeUpdateMessageFlags', () {
440357
UpdateMessageFlagsAddEvent mkAddEvent(
441358
MessageFlag flag,

test/model/message_test.dart

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import 'package:zulip/model/narrow.dart';
77
import 'package:zulip/model/store.dart';
88

99
import '../api/fake_api.dart';
10+
import '../api/model/model_checks.dart';
1011
import '../example_data.dart' as eg;
12+
import '../stdlib_checks.dart';
1113
import 'message_list_test.dart';
1214
import 'test_store.dart';
1315

@@ -48,7 +50,6 @@ void main() {
4850
/// Perform the initial message fetch for [messageList].
4951
///
5052
/// The test case must have already called [prepare] to initialize the state.
51-
// ignore: unused_element
5253
Future<void> prepareMessages(
5354
List<Message> messages, {
5455
bool foundOldest = false,
@@ -151,4 +152,87 @@ void main() {
151152
check(store.messages).deepEquals({1: newMessage});
152153
});
153154
});
155+
156+
group('handleReactionEvent', () {
157+
ReactionEvent mkEvent(Reaction reaction, ReactionOp op, int messageId) {
158+
return ReactionEvent(
159+
id: 1,
160+
op: op,
161+
emojiName: reaction.emojiName,
162+
emojiCode: reaction.emojiCode,
163+
reactionType: reaction.reactionType,
164+
userId: reaction.userId,
165+
messageId: messageId,
166+
);
167+
}
168+
169+
test('add reaction', () async {
170+
final originalMessage = eg.streamMessage(reactions: []);
171+
prepare();
172+
await prepareMessages([originalMessage]);
173+
final message = store.messages.values.single;
174+
175+
await store.handleEvent(
176+
mkEvent(eg.unicodeEmojiReaction, ReactionOp.add, originalMessage.id));
177+
checkNotifiedOnce();
178+
check(store.messages).values.single
179+
..identicalTo(message)
180+
..reactions.isNotNull().jsonEquals([eg.unicodeEmojiReaction]);
181+
});
182+
183+
test('add reaction; message is unknown', () async {
184+
final someMessage = eg.streamMessage(reactions: []);
185+
prepare();
186+
await prepareMessages([someMessage]);
187+
await store.handleEvent(
188+
mkEvent(eg.unicodeEmojiReaction, ReactionOp.add, 1000));
189+
checkNotNotified();
190+
check(store.messages).values.single
191+
.reactions.isNull();
192+
});
193+
194+
test('remove reaction', () async {
195+
final eventReaction = Reaction(reactionType: ReactionType.unicodeEmoji,
196+
emojiName: 'wave', emojiCode: '1f44b', userId: 1);
197+
198+
// Same emoji, different user. Not to be removed.
199+
final reaction2 = Reaction(reactionType: ReactionType.unicodeEmoji,
200+
emojiName: 'wave', emojiCode: '1f44b', userId: 2);
201+
202+
// Same user, different emoji. Not to be removed.
203+
final reaction3 = Reaction(reactionType: ReactionType.unicodeEmoji,
204+
emojiName: 'working_on_it', emojiCode: '1f6e0', userId: 1);
205+
206+
// Same user, same emojiCode, different emojiName. To be removed: servers
207+
// key on user, message, reaction type, and emoji code, but not emoji name.
208+
// So we mimic that behavior; see discussion:
209+
// https://github.com/zulip/zulip-flutter/pull/256#discussion_r1284865099
210+
final reaction4 = Reaction(reactionType: ReactionType.unicodeEmoji,
211+
emojiName: 'hello', emojiCode: '1f44b', userId: 1);
212+
213+
final originalMessage = eg.streamMessage(
214+
reactions: [reaction2, reaction3, reaction4]);
215+
prepare();
216+
await prepareMessages([originalMessage]);
217+
final message = store.messages.values.single;
218+
219+
await store.handleEvent(
220+
mkEvent(eventReaction, ReactionOp.remove, originalMessage.id));
221+
checkNotifiedOnce();
222+
check(store.messages).values.single
223+
..identicalTo(message)
224+
..reactions.isNotNull().jsonEquals([reaction2, reaction3]);
225+
});
226+
227+
test('remove reaction; message is unknown', () async {
228+
final someMessage = eg.streamMessage(reactions: [eg.unicodeEmojiReaction]);
229+
prepare();
230+
await prepareMessages([someMessage]);
231+
await store.handleEvent(
232+
mkEvent(eg.unicodeEmojiReaction, ReactionOp.remove, 1000));
233+
checkNotNotified();
234+
check(store.messages).values.single
235+
.reactions.isNotNull().jsonEquals([eg.unicodeEmojiReaction]);
236+
});
237+
});
154238
}

0 commit comments

Comments
 (0)