@@ -490,6 +490,26 @@ void main() {
490
490
});
491
491
});
492
492
493
+ group ('compareByBotStatus' , () {
494
+ final humanUser = eg.user (isBot: false );
495
+ final botUser = eg.user (isBot: true );
496
+
497
+ int compareAB (User a, User b) => MentionAutocompleteView .compareByBotStatus (a, b);
498
+
499
+ test ('userA is human, userB is bot -> favor userA' , () {
500
+ check (compareAB (humanUser, botUser)).isLessThan (0 );
501
+ });
502
+
503
+ test ('userA is bot, userB is human -> favor userB' , () {
504
+ check (compareAB (botUser, humanUser)).isGreaterThan (0 );
505
+ });
506
+
507
+ test ('both users have the same bot status -> favor none' , () {
508
+ check (compareAB (humanUser, humanUser)).equals (0 );
509
+ check (compareAB (botUser, botUser)).equals (0 );
510
+ });
511
+ });
512
+
493
513
group ('ranking across signals' , () {
494
514
void checkPrecedes (Narrow narrow, User userA, Iterable <User > usersB) {
495
515
final view = MentionAutocompleteView .init (store: store, narrow: narrow);
@@ -509,8 +529,17 @@ void main() {
509
529
}
510
530
}
511
531
512
- test ('TopicNarrow: topic recency > stream recency > DM recency' , () async {
513
- final users = List .generate (5 , (i) => eg.user ());
532
+ test ('TopicNarrow: topic recency > stream recency > DM recency '
533
+ '> human vs. bot user' , () async {
534
+ final users = [
535
+ eg.user (),
536
+ eg.user (),
537
+ eg.user (isBot: true ),
538
+ eg.user (),
539
+ eg.user (),
540
+ eg.user (),
541
+ eg.user (isBot: true ),
542
+ ];
514
543
final stream = eg.stream ();
515
544
final narrow = TopicNarrow (stream.streamId, 'this' );
516
545
await prepare (users: users, messages: [
@@ -525,25 +554,43 @@ void main() {
525
554
checkPrecedes (narrow, users[1 ], users.skip (2 ));
526
555
checkPrecedes (narrow, users[2 ], users.skip (3 ));
527
556
checkRankEqual (narrow, [users[3 ], users[4 ]]);
557
+ checkPrecedes (narrow, users[5 ], users.skip (6 ));
528
558
});
529
559
530
- test ('ChannelNarrow: stream recency > DM recency' , () async {
531
- final users = List .generate (4 , (i) => eg.user ());
560
+ test ('ChannelNarrow: stream recency > DM recency > human vs. bot user' , () async {
561
+ final users = [
562
+ eg.user (isBot: true ),
563
+ eg.user (),
564
+ eg.user (),
565
+ eg.user (),
566
+ eg.user (),
567
+ eg.user (isBot: true ),
568
+ ];
532
569
final stream = eg.stream ();
533
570
final narrow = ChannelNarrow (stream.streamId);
534
571
await prepare (users: users, messages: [
535
572
eg.streamMessage (sender: users[1 ], stream: stream),
536
573
eg.streamMessage (sender: users[0 ], stream: stream),
537
574
eg.dmMessage (from: users[2 ], to: [users[3 ], eg.selfUser]),
538
575
eg.dmMessage (from: users[1 ], to: [eg.selfUser]),
576
+ eg.dmMessage (from: users[4 ], to: [users[5 ], eg.selfUser]),
539
577
]);
540
578
checkPrecedes (narrow, users[0 ], users.skip (1 ));
541
579
checkPrecedes (narrow, users[1 ], users.skip (2 ));
542
580
checkRankEqual (narrow, [users[2 ], users[3 ]]);
581
+ checkPrecedes (narrow, users[4 ], users.skip (5 ));
543
582
});
544
583
545
- test ('DmNarrow: DM recency > this-conversation recency or stream recency' , () async {
546
- final users = List .generate (4 , (i) => eg.user ());
584
+ test ('DmNarrow: DM recency > this-conversation recency or stream recency '
585
+ 'or human vs. bot user' , () async {
586
+ final users = [
587
+ eg.user (isBot: true ),
588
+ eg.user (),
589
+ eg.user (),
590
+ eg.user (),
591
+ eg.user (),
592
+ eg.user (isBot: true ),
593
+ ];
547
594
await prepare (users: users, messages: [
548
595
eg.dmMessage (from: users[3 ], to: [eg.selfUser]),
549
596
eg.dmMessage (from: users[1 ], to: [users[2 ], eg.selfUser]),
@@ -562,6 +609,7 @@ void main() {
562
609
checkRankEqual (narrow, [users[1 ], users[2 ]]);
563
610
checkPrecedes (narrow, users[1 ], users.skip (3 ));
564
611
checkPrecedes (narrow, users[2 ], users.skip (3 ));
612
+ checkPrecedes (narrow, users[4 ], users.skip (5 ));
565
613
}
566
614
});
567
615
@@ -605,6 +653,8 @@ void main() {
605
653
eg.user (userId: 3 , fullName: 'User Three' ),
606
654
eg.user (userId: 4 , fullName: 'User Four' ),
607
655
eg.user (userId: 5 , fullName: 'User Five' ),
656
+ eg.user (userId: 6 , fullName: 'User Six' , isBot: true ),
657
+ eg.user (userId: 7 , fullName: 'User Seven' ),
608
658
];
609
659
610
660
await prepare (users: users, messages: [
@@ -620,14 +670,17 @@ void main() {
620
670
// The order should be:
621
671
// 1. Users most recent in the current topic/stream.
622
672
// 2. Users most recent in the DM conversations.
673
+ // 3. Human vs. Bot users (human users come first).
623
674
check (await getResults (topicNarrow, MentionAutocompleteQuery ('' )))
624
- .deepEquals ([1 , 5 , 4 , 2 , 3 ]);
675
+ .deepEquals ([1 , 5 , 4 , 2 , 3 , 7 , 6 ]);
625
676
626
677
// Check the ranking applies also to results filtered by a query.
627
678
check (await getResults (topicNarrow, MentionAutocompleteQuery ('t' )))
628
679
.deepEquals ([2 , 3 ]);
629
680
check (await getResults (topicNarrow, MentionAutocompleteQuery ('f' )))
630
681
.deepEquals ([5 , 4 ]);
682
+ check (await getResults (topicNarrow, MentionAutocompleteQuery ('s' )))
683
+ .deepEquals ([7 , 6 ]);
631
684
});
632
685
});
633
686
}
0 commit comments