@@ -510,6 +510,29 @@ void main() {
510
510
});
511
511
});
512
512
513
+ group ('compareByAlphabeticalOrder' , () {
514
+ int compareAB (String aName, String bName) => MentionAutocompleteView .compareByAlphabeticalOrder (
515
+ eg.user (fullName: aName), eg.user (fullName: bName), store: store);
516
+
517
+ test ("userA's fullName comes first than userB's fullName -> favor userA" , () async {
518
+ await prepare ();
519
+ check (compareAB ('alice' , 'brian' )).isLessThan (0 );
520
+ check (compareAB ('alice' , 'BRIAN' )).isLessThan (0 );
521
+ });
522
+
523
+ test ("userB's fullName comes first than userA's fullName -> favor userB" , () async {
524
+ await prepare ();
525
+ check (compareAB ('brian' , 'alice' )).isGreaterThan (0 );
526
+ check (compareAB ('BRIAN' , 'alice' )).isGreaterThan (0 );
527
+ });
528
+
529
+ test ('both users have identical fullName -> favor none' , () async {
530
+ await prepare ();
531
+ check (compareAB ('alice' , 'alice' )).equals (0 );
532
+ check (compareAB ('BRIAN' , 'brian' )).equals (0 );
533
+ });
534
+ });
535
+
513
536
group ('ranking across signals' , () {
514
537
void checkPrecedes (Narrow narrow, User userA, Iterable <User > usersB) {
515
538
final view = MentionAutocompleteView .init (store: store, narrow: narrow);
@@ -530,15 +553,17 @@ void main() {
530
553
}
531
554
532
555
test ('TopicNarrow: topic recency > stream recency > DM recency '
533
- '> human vs. bot user' , () async {
556
+ '> human vs. bot user > alphabetical order ' , () async {
534
557
final users = [
535
- eg.user (),
558
+ eg.user (fullName : 'Z' ),
536
559
eg.user (),
537
560
eg.user (isBot: true ),
538
561
eg.user (),
539
562
eg.user (),
540
563
eg.user (),
541
564
eg.user (isBot: true ),
565
+ eg.user (fullName: 'ab' ),
566
+ eg.user (fullName: 'bc' ),
542
567
];
543
568
final stream = eg.stream ();
544
569
final narrow = TopicNarrow (stream.streamId, 'this' );
@@ -555,16 +580,20 @@ void main() {
555
580
checkPrecedes (narrow, users[2 ], users.skip (3 ));
556
581
checkRankEqual (narrow, [users[3 ], users[4 ]]);
557
582
checkPrecedes (narrow, users[5 ], users.skip (6 ));
583
+ checkPrecedes (narrow, users[7 ], users.skip (8 ));
558
584
});
559
585
560
- test ('ChannelNarrow: stream recency > DM recency > human vs. bot user' , () async {
586
+ test ('ChannelNarrow: stream recency > DM recency > human vs. bot user '
587
+ '> alphabetical order' , () async {
561
588
final users = [
562
- eg.user (isBot: true ),
589
+ eg.user (isBot: true , fullName : 'Z' ),
563
590
eg.user (),
564
591
eg.user (),
565
592
eg.user (),
566
593
eg.user (),
567
594
eg.user (isBot: true ),
595
+ eg.user (fullName: 'ab' , isBot: true ),
596
+ eg.user (fullName: 'bc' , isBot: true ),
568
597
];
569
598
final stream = eg.stream ();
570
599
final narrow = ChannelNarrow (stream.streamId);
@@ -579,17 +608,20 @@ void main() {
579
608
checkPrecedes (narrow, users[1 ], users.skip (2 ));
580
609
checkRankEqual (narrow, [users[2 ], users[3 ]]);
581
610
checkPrecedes (narrow, users[4 ], users.skip (5 ));
611
+ checkPrecedes (narrow, users[6 ], users.skip (7 ));
582
612
});
583
613
584
614
test ('DmNarrow: DM recency > this-conversation recency or stream recency '
585
- 'or human vs. bot user' , () async {
615
+ 'or human vs. bot user or alphabetical order ' , () async {
586
616
final users = [
587
- eg.user (isBot: true ),
617
+ eg.user (isBot: true , fullName : 'Z' ),
588
618
eg.user (),
589
619
eg.user (),
590
620
eg.user (),
591
621
eg.user (),
592
622
eg.user (isBot: true ),
623
+ eg.user (fullName: 'ab' ),
624
+ eg.user (fullName: 'bc' ),
593
625
];
594
626
await prepare (users: users, messages: [
595
627
eg.dmMessage (from: users[3 ], to: [eg.selfUser]),
@@ -610,6 +642,7 @@ void main() {
610
642
checkPrecedes (narrow, users[1 ], users.skip (3 ));
611
643
checkPrecedes (narrow, users[2 ], users.skip (3 ));
612
644
checkPrecedes (narrow, users[4 ], users.skip (5 ));
645
+ checkPrecedes (narrow, users[6 ], users.skip (7 ));
613
646
}
614
647
});
615
648
@@ -648,6 +681,8 @@ void main() {
648
681
eg.user (userId: 5 , fullName: 'User Five' ),
649
682
eg.user (userId: 6 , fullName: 'User Six' , isBot: true ),
650
683
eg.user (userId: 7 , fullName: 'User Seven' ),
684
+ eg.user (userId: 8 , fullName: 'User Xy' , isBot: true ),
685
+ eg.user (userId: 9 , fullName: 'User Xz' , isBot: true ),
651
686
];
652
687
653
688
await prepare (users: users, messages: [
@@ -664,8 +699,9 @@ void main() {
664
699
// 1. Users most recent in the current topic/stream.
665
700
// 2. Users most recent in the DM conversations.
666
701
// 3. Human vs. Bot users (human users come first).
702
+ // 4. Alphabetical order.
667
703
check (await getResults (topicNarrow, MentionAutocompleteQuery ('' )))
668
- .deepEquals ([1 , 5 , 4 , 2 , 3 , 7 , 6 ]);
704
+ .deepEquals ([1 , 5 , 4 , 2 , 7 , 3 , 6 , 8 , 9 ]);
669
705
670
706
// Check the ranking applies also to results filtered by a query.
671
707
check (await getResults (topicNarrow, MentionAutocompleteQuery ('t' )))
@@ -674,6 +710,8 @@ void main() {
674
710
.deepEquals ([5 , 4 ]);
675
711
check (await getResults (topicNarrow, MentionAutocompleteQuery ('s' )))
676
712
.deepEquals ([7 , 6 ]);
713
+ check (await getResults (topicNarrow, MentionAutocompleteQuery ('user x' )))
714
+ .deepEquals ([8 , 9 ]);
677
715
});
678
716
});
679
717
}
0 commit comments