Skip to content

Commit bfce142

Browse files
committed
autocomplete test: Unit tests of between-signals logic, for each narrow type
1 parent 4762e4e commit bfce142

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

test/model/autocomplete_test.dart

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,82 @@ void main() {
491491
});
492492
});
493493

494+
group('ranking across signals', () {
495+
void checkPrecedes(Narrow narrow, User userA, Iterable<User> usersB) {
496+
final view = MentionAutocompleteView.init(store: store, narrow: narrow);
497+
for (final userB in usersB) {
498+
check(view.debugCompareUsers(userA, userB)).isLessThan(0);
499+
check(view.debugCompareUsers(userB, userA)).isGreaterThan(0);
500+
}
501+
}
502+
503+
void checkRankEqual(Narrow narrow, List<User> users) {
504+
final view = MentionAutocompleteView.init(store: store, narrow: narrow);
505+
for (int i = 0; i < users.length; i++) {
506+
for (int j = i + 1; j < users.length; j++) {
507+
check(view.debugCompareUsers(users[i], users[j])).equals(0);
508+
check(view.debugCompareUsers(users[j], users[i])).equals(0);
509+
}
510+
}
511+
}
512+
513+
test('TopicNarrow: topic recency > stream recency > DM recency', () async {
514+
final users = List.generate(5, (i) => eg.user());
515+
final stream = eg.stream();
516+
final narrow = TopicNarrow(stream.streamId, 'this');
517+
await prepare(users: users, messages: [
518+
eg.streamMessage(sender: users[1], stream: stream, topic: 'this'),
519+
eg.streamMessage(sender: users[0], stream: stream, topic: 'this'),
520+
eg.streamMessage(sender: users[2], stream: stream, topic: 'other'),
521+
eg.streamMessage(sender: users[1], stream: stream, topic: 'other'),
522+
eg.dmMessage(from: users[3], to: [users[4], eg.selfUser]),
523+
eg.dmMessage(from: users[2], to: [eg.selfUser]),
524+
]);
525+
checkPrecedes(narrow, users[0], users.skip(1));
526+
checkPrecedes(narrow, users[1], users.skip(2));
527+
checkPrecedes(narrow, users[2], users.skip(3));
528+
checkRankEqual(narrow, [users[3], users[4]]);
529+
});
530+
531+
test('StreamNarrow: stream recency > DM recency', () async {
532+
final users = List.generate(4, (i) => eg.user());
533+
final stream = eg.stream();
534+
final narrow = StreamNarrow(stream.streamId);
535+
await prepare(users: users, messages: [
536+
eg.streamMessage(sender: users[1], stream: stream),
537+
eg.streamMessage(sender: users[0], stream: stream),
538+
eg.dmMessage(from: users[2], to: [users[3], eg.selfUser]),
539+
eg.dmMessage(from: users[1], to: [eg.selfUser]),
540+
]);
541+
checkPrecedes(narrow, users[0], users.skip(1));
542+
checkPrecedes(narrow, users[1], users.skip(2));
543+
checkRankEqual(narrow, [users[2], users[3]]);
544+
});
545+
546+
test('DmNarrow: DM recency > this-conversation recency or stream recency', () async {
547+
final users = List.generate(4, (i) => eg.user());
548+
await prepare(users: users, messages: [
549+
eg.dmMessage(from: users[3], to: [eg.selfUser]),
550+
eg.dmMessage(from: users[1], to: [users[2], eg.selfUser]),
551+
eg.dmMessage(from: users[0], to: [eg.selfUser]),
552+
eg.streamMessage(sender: users[1]),
553+
eg.streamMessage(sender: users[2]),
554+
eg.streamMessage(sender: users[3]),
555+
]);
556+
for (final narrow in [
557+
DmNarrow.withUser(users[3].userId, selfUserId: eg.selfUser.userId),
558+
DmNarrow.withOtherUsers([users[1].userId, users[2].userId],
559+
selfUserId: eg.selfUser.userId),
560+
DmNarrow.withUser(users[1].userId, selfUserId: eg.selfUser.userId),
561+
]) {
562+
checkPrecedes(narrow, users[0], users.skip(1));
563+
checkRankEqual(narrow, [users[1], users[2]]);
564+
checkPrecedes(narrow, users[1], users.skip(3));
565+
checkPrecedes(narrow, users[2], users.skip(3));
566+
}
567+
});
568+
});
569+
494570
group('autocomplete suggests relevant users in the intended order', () {
495571
// The order should be:
496572
// 1. Users most recent in the current topic/stream.

0 commit comments

Comments
 (0)