Skip to content

Commit 5b006da

Browse files
committed
msglist test: Check showSender behavior around date separators
This check in checkInvariants wasn't updated when we added date separators recently; and the reason nothing broke is because we didn't have a test to exercise that, oops. Update the invariant, and extend the relevant test to exercise it. Now the new test would fail if run with the old checkInvariants.
1 parent 6157fc0 commit 5b006da

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

test/model/message_list_test.dart

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -780,21 +780,23 @@ void main() async {
780780
// whether the sender should be shown, but the difference between
781781
// fetchInitial and maybeAddMessage etc. doesn't matter.
782782

783-
const timestamp = 1693602618;
783+
const t1 = 1693602618;
784+
const t2 = t1 + 86400;
784785
final stream = eg.stream();
785-
Message streamMessage(int id, User sender) =>
786+
Message streamMessage(int id, int timestamp, User sender) =>
786787
eg.streamMessage(id: id, sender: sender,
787788
stream: stream, topic: 'foo', timestamp: timestamp);
788-
Message dmMessage(int id, User sender) =>
789+
Message dmMessage(int id, int timestamp, User sender) =>
789790
eg.dmMessage(id: id, from: sender, timestamp: timestamp,
790791
to: [sender.userId == eg.selfUser.userId ? eg.otherUser : eg.selfUser]);
791792

792793
prepare();
793794
await prepareMessages(foundOldest: true, messages: [
794-
streamMessage(1, eg.selfUser), // first message, so show sender
795-
streamMessage(2, eg.selfUser), // hide sender
796-
streamMessage(3, eg.otherUser), // no recipient header, but new sender
797-
dmMessage(4, eg.otherUser), // same sender, but recipient header
795+
streamMessage(1, t1, eg.selfUser), // first message, so show sender
796+
streamMessage(2, t1, eg.selfUser), // hide sender
797+
streamMessage(3, t1, eg.otherUser), // no recipient header, but new sender
798+
dmMessage(4, t1, eg.otherUser), // same sender, but new recipient
799+
dmMessage(5, t2, eg.otherUser), // same sender/recipient, but new day
798800
]);
799801

800802
// We check showSender has the right values in [checkInvariants],
@@ -807,6 +809,8 @@ void main() async {
807809
it()..isA<MessageListMessageItem>().showSender.isTrue(),
808810
it()..isA<MessageListRecipientHeaderItem>(),
809811
it()..isA<MessageListMessageItem>().showSender.isTrue(),
812+
it()..isA<MessageListDateSeparatorItem>(),
813+
it()..isA<MessageListMessageItem>().showSender.isTrue(),
810814
]);
811815
});
812816

@@ -946,21 +950,22 @@ void checkInvariants(MessageListView model) {
946950
check(model.items[i++]).isA<MessageListLoadingItem>();
947951
}
948952
for (int j = 0; j < model.messages.length; j++) {
949-
bool isFirstInBlock = false;
953+
bool forcedShowSender = false;
950954
if (j == 0
951955
|| !haveSameRecipient(model.messages[j-1], model.messages[j])) {
952956
check(model.items[i++]).isA<MessageListRecipientHeaderItem>()
953957
.message.identicalTo(model.messages[j]);
954-
isFirstInBlock = true;
958+
forcedShowSender = true;
955959
} else if (!messagesSameDay(model.messages[j-1], model.messages[j])) {
956960
check(model.items[i++]).isA<MessageListDateSeparatorItem>()
957961
.message.identicalTo(model.messages[j]);
962+
forcedShowSender = true;
958963
}
959964
check(model.items[i++]).isA<MessageListMessageItem>()
960965
..message.identicalTo(model.messages[j])
961966
..content.identicalTo(model.contents[j])
962967
..showSender.equals(
963-
isFirstInBlock || model.messages[j].senderId != model.messages[j-1].senderId)
968+
forcedShowSender || model.messages[j].senderId != model.messages[j-1].senderId)
964969
..isLastInBlock.equals(
965970
i == model.items.length || model.items[i] is! MessageListMessageItem);
966971
}

0 commit comments

Comments
 (0)