Skip to content

Commit 37c7de8

Browse files
gnpricechrisbobbe
authored andcommitted
message test [nfc]: Move ReactionEvent tests from msglist test file
1 parent b844fea commit 37c7de8

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

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

0 commit comments

Comments
 (0)