Skip to content

Commit e40dd90

Browse files
committed
test [nfc]: Split eg.updateMessageMoveEvent helper.
When testing, in some cases it is more convenient to prepare the original messages with the topic/stream prior to the move or the other way around. To keep the fallback behavior consistent in either cases, we introduce two variants that produce an UpdateMessageEvent suitable for different contexts. Signed-off-by: Zixuan James Li <[email protected]>
1 parent 7c31a1e commit e40dd90

File tree

3 files changed

+83
-42
lines changed

3 files changed

+83
-42
lines changed

test/example_data.dart

Lines changed: 60 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -463,26 +463,28 @@ UpdateMessageEvent updateMessageEditEvent(
463463
);
464464
}
465465

466-
UpdateMessageEvent updateMessageMoveEvent(
467-
List<Message> messages, {
466+
UpdateMessageEvent _updateMessageMoveEvent(
467+
List<int> messageIds, {
468+
required int origStreamId,
468469
int? newStreamId,
469-
String? origTopic,
470+
required String origTopic,
470471
String? newTopic,
471472
String? origContent,
472473
String? newContent,
474+
required List<MessageFlag> flags,
473475
}) {
474-
assert(messages.isNotEmpty);
475-
final origMessage = messages[0];
476-
final messageId = origMessage.id;
476+
assert(newTopic != origTopic
477+
|| (newStreamId != null && newStreamId != origStreamId));
478+
assert(messageIds.isNotEmpty);
477479
return UpdateMessageEvent(
478480
id: 0,
479481
userId: selfUser.userId,
480482
renderingOnly: false,
481-
messageId: messageId,
482-
messageIds: messages.map((message) => message.id).toList(),
483-
flags: origMessage.flags,
483+
messageId: messageIds.first,
484+
messageIds: messageIds,
485+
flags: flags,
484486
editTimestamp: 1234567890, // TODO generate timestamp
485-
origStreamId: origMessage is StreamMessage ? origMessage.streamId : null,
487+
origStreamId: origStreamId,
486488
newStreamId: newStreamId,
487489
propagateMode: null,
488490
origTopic: origTopic,
@@ -495,6 +497,54 @@ UpdateMessageEvent updateMessageMoveEvent(
495497
);
496498
}
497499

500+
/// An [UpdateMessageEvent] where [origMessages] are moved to somewhere else.
501+
UpdateMessageEvent updateMessageEventMoveFrom({
502+
required List<StreamMessage> origMessages,
503+
int? newStreamId,
504+
String? newTopic,
505+
String? newContent,
506+
}) {
507+
assert(origMessages.isNotEmpty);
508+
final origMessage = origMessages.first;
509+
// Only present on content change.
510+
final origContent = (newContent != null) ? origMessage.content : null;
511+
return _updateMessageMoveEvent(origMessages.map((e) => e.id).toList(),
512+
origStreamId: origMessage.streamId,
513+
newStreamId: newStreamId,
514+
origTopic: origMessage.topic,
515+
newTopic: newTopic,
516+
origContent: origContent,
517+
newContent: newContent,
518+
flags: origMessage.flags,
519+
);
520+
}
521+
522+
/// An [UpdateMessageEvent] where [newMessages] are moved from somewhere.
523+
UpdateMessageEvent updateMessageEventMoveTo({
524+
required List<StreamMessage> newMessages,
525+
int? origStreamId,
526+
String? origTopic,
527+
String? origContent,
528+
}) {
529+
assert(newMessages.isNotEmpty);
530+
final newMessage = newMessages.first;
531+
// Only present on topic move.
532+
final newTopic = (origTopic != null) ? newMessage.topic : null;
533+
// Only present on channel move.
534+
final newStreamId = (origStreamId != null) ? newMessage.streamId : null;
535+
// Only present on content change.
536+
final newContent = (origContent != null) ? newMessage.content : null;
537+
return _updateMessageMoveEvent(newMessages.map((e) => e.id).toList(),
538+
origStreamId: origStreamId ?? newMessage.streamId,
539+
newStreamId: newStreamId,
540+
origTopic: origTopic ?? newMessage.topic,
541+
newTopic: newTopic,
542+
origContent: origContent,
543+
newContent: newContent,
544+
flags: newMessage.flags,
545+
);
546+
}
547+
498548
UpdateMessageFlagsRemoveEvent updateMessageFlagsRemoveEvent(
499549
MessageFlag flag,
500550
Iterable<Message> messages, {

test/model/message_test.dart

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -297,73 +297,63 @@ void main() {
297297

298298
test('message topic moved update', () async {
299299
await prepareOrigMessages(origTopic: 'old topic');
300-
await store.handleEvent(eg.updateMessageMoveEvent(
301-
origMessages,
302-
origTopic: 'old topic',
300+
await store.handleEvent(eg.updateMessageEventMoveFrom(
301+
origMessages: origMessages,
303302
newTopic: 'new topic'));
304303
checkNotifiedOnce();
305304
check(store).messages.values.every(((message) => message.editState.equals(MessageEditState.moved)));
306305
});
307306

308307
test('message topic resolved update', () async {
309308
await prepareOrigMessages(origTopic: 'new topic');
310-
await store.handleEvent(eg.updateMessageMoveEvent(
311-
origMessages,
312-
origTopic: 'new topic',
309+
await store.handleEvent(eg.updateMessageEventMoveFrom(
310+
origMessages: origMessages,
313311
newTopic: '✔ new topic'));
314312
checkNotifiedOnce();
315313
check(store).messages.values.every(((message) => message.editState.equals(MessageEditState.none)));
316314
});
317315

318316
test('message topic unresolved update', () async {
319317
await prepareOrigMessages(origTopic: '✔ new topic');
320-
await store.handleEvent(eg.updateMessageMoveEvent(
321-
origMessages,
322-
origTopic: '✔ new topic',
318+
await store.handleEvent(eg.updateMessageEventMoveFrom(
319+
origMessages: origMessages,
323320
newTopic: 'new topic'));
324321
checkNotifiedOnce();
325322
check(store).messages.values.every(((message) => message.editState.equals(MessageEditState.none)));
326323
});
327324

328325
test('message topic both resolved and edited update', () async {
329326
await prepareOrigMessages(origTopic: 'new topic');
330-
await store.handleEvent(eg.updateMessageMoveEvent(
331-
origMessages,
332-
origTopic: 'new topic',
327+
await store.handleEvent(eg.updateMessageEventMoveFrom(
328+
origMessages: origMessages,
333329
newTopic: '✔ new topic 2'));
334330
checkNotifiedOnce();
335331
check(store).messages.values.every(((message) => message.editState.equals(MessageEditState.moved)));
336332
});
337333

338334
test('message topic both unresolved and edited update', () async {
339335
await prepareOrigMessages(origTopic: '✔ new topic');
340-
await store.handleEvent(eg.updateMessageMoveEvent(
341-
origMessages,
342-
origTopic: '✔ new topic',
336+
await store.handleEvent(eg.updateMessageEventMoveFrom(
337+
origMessages: origMessages,
343338
newTopic: 'new topic 2'));
344339
checkNotifiedOnce();
345340
check(store).messages.values.every(((message) => message.editState.equals(MessageEditState.moved)));
346341
});
347342

348343
test('message stream moved without topic change', () async {
349344
await prepareOrigMessages(origTopic: 'topic');
350-
await store.handleEvent(eg.updateMessageMoveEvent(
351-
origMessages,
352-
origTopic: 'topic',
353-
newTopic: 'topic',
354-
newStreamId: 20));
345+
await store.handleEvent(eg.updateMessageEventMoveFrom(
346+
origMessages: origMessages,
347+
newStreamId: 20));
355348
checkNotifiedOnce();
356349
check(store).messages.values.every(((message) => message.editState.equals(MessageEditState.moved)));
357350
});
358351

359352
test('message is both moved and updated', () async {
360353
await prepareOrigMessages(origTopic: 'topic', origContent: 'old content');
361-
await store.handleEvent(eg.updateMessageMoveEvent(
362-
origMessages,
363-
origTopic: 'topic',
364-
newTopic: 'topic',
365-
newStreamId: 20,
366-
origContent: 'old content',
354+
await store.handleEvent(eg.updateMessageEventMoveFrom(
355+
origMessages: origMessages,
356+
newStreamId: 20,
367357
newContent: 'new content'));
368358
checkNotifiedOnce();
369359
check(store).messages[origMessages[0].id].editState.equals(MessageEditState.edited);

test/widgets/message_list_test.dart

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -965,17 +965,17 @@ void main() {
965965
});
966966

967967
testWidgets('edited and moved messages from events', (WidgetTester tester) async {
968-
final message = eg.streamMessage();
969-
final message2 = eg.streamMessage();
968+
final message = eg.streamMessage(topic: 'old');
969+
final message2 = eg.streamMessage(topic: 'old');
970970
await setupMessageListPage(tester, messages: [message, message2]);
971971
checkMarkersCount(edited: 0, moved: 0);
972972

973973
await store.handleEvent(eg.updateMessageEditEvent(message, renderedContent: 'edited'));
974974
await tester.pump();
975975
checkMarkersCount(edited: 1, moved: 0);
976976

977-
await store.handleEvent(eg.updateMessageMoveEvent(
978-
[message, message2], origTopic: 'old', newTopic: 'new'));
977+
await store.handleEvent(eg.updateMessageEventMoveFrom(
978+
origMessages: [message, message2], newTopic: 'new'));
979979
await tester.pump();
980980
checkMarkersCount(edited: 1, moved: 1);
981981

@@ -1030,8 +1030,9 @@ void main() {
10301030
final rectsBefore = captureMessageRects(tester, messages, messageWithMarker);
10311031
checkMarkersCount(edited: 0, moved: 0);
10321032

1033-
await store.handleEvent(eg.updateMessageMoveEvent(
1034-
[messageWithMarker], origTopic: 'old', newTopic: messageWithMarker.topic));
1033+
// TODO(#150): [messageWithMarker]'s topic in store is inconsistent with the event. This will be fixed soon.
1034+
await store.handleEvent(eg.updateMessageEventMoveTo(
1035+
origTopic: 'old', newMessages: [messageWithMarker]));
10351036
await tester.pump();
10361037
check(captureMessageRects(tester, messages, messageWithMarker))
10371038
.deepEquals(rectsBefore);

0 commit comments

Comments
 (0)