@@ -510,6 +510,35 @@ 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
+ // TODO(i18n): add locale-aware sorting
522
+ // check(compareAB('čarolína', 'david')).isLessThan(0);
523
+ });
524
+
525
+ test ("userB's fullName comes first than userA's fullName -> favor userB" , () async {
526
+ await prepare ();
527
+ check (compareAB ('brian' , 'alice' )).isGreaterThan (0 );
528
+ check (compareAB ('BRIAN' , 'alice' )).isGreaterThan (0 );
529
+ // TODO(i18n): add locale-aware sorting
530
+ // check(compareAB('david', 'čarolína')).isGreaterThan(0);
531
+ });
532
+
533
+ test ('both users have identical fullName -> favor none' , () async {
534
+ await prepare ();
535
+ check (compareAB ('alice' , 'alice' )).equals (0 );
536
+ check (compareAB ('BRIAN' , 'brian' )).equals (0 );
537
+ // TODO(i18n): add locale-aware sorting
538
+ // check(compareAB('čarolína', 'carolina')).equals(0);
539
+ });
540
+ });
541
+
513
542
group ('ranking across signals' , () {
514
543
void checkPrecedes (Narrow narrow, User userA, Iterable <User > usersB) {
515
544
final view = MentionAutocompleteView .init (store: store, narrow: narrow);
@@ -530,15 +559,17 @@ void main() {
530
559
}
531
560
532
561
test ('TopicNarrow: topic recency > stream recency > DM recency '
533
- '> human vs. bot user' , () async {
562
+ '> human vs. bot user > alphabetical order ' , () async {
534
563
final users = [
535
- eg.user (),
564
+ eg.user (fullName : 'Z' ),
536
565
eg.user (),
537
566
eg.user (isBot: true ),
538
567
eg.user (),
539
568
eg.user (),
540
569
eg.user (),
541
570
eg.user (isBot: true ),
571
+ eg.user (fullName: 'ab' ),
572
+ eg.user (fullName: 'bc' ),
542
573
];
543
574
final stream = eg.stream ();
544
575
final narrow = TopicNarrow (stream.streamId, 'this' );
@@ -555,16 +586,20 @@ void main() {
555
586
checkPrecedes (narrow, users[2 ], users.skip (3 ));
556
587
checkRankEqual (narrow, [users[3 ], users[4 ]]);
557
588
checkPrecedes (narrow, users[5 ], users.skip (6 ));
589
+ checkPrecedes (narrow, users[7 ], users.skip (8 ));
558
590
});
559
591
560
- test ('ChannelNarrow: stream recency > DM recency > human vs. bot user' , () async {
592
+ test ('ChannelNarrow: stream recency > DM recency > human vs. bot user '
593
+ '> alphabetical order' , () async {
561
594
final users = [
562
- eg.user (isBot: true ),
595
+ eg.user (isBot: true , fullName : 'Z' ),
563
596
eg.user (),
564
597
eg.user (),
565
598
eg.user (),
566
599
eg.user (),
567
600
eg.user (isBot: true ),
601
+ eg.user (fullName: 'ab' , isBot: true ),
602
+ eg.user (fullName: 'bc' , isBot: true ),
568
603
];
569
604
final stream = eg.stream ();
570
605
final narrow = ChannelNarrow (stream.streamId);
@@ -579,17 +614,20 @@ void main() {
579
614
checkPrecedes (narrow, users[1 ], users.skip (2 ));
580
615
checkRankEqual (narrow, [users[2 ], users[3 ]]);
581
616
checkPrecedes (narrow, users[4 ], users.skip (5 ));
617
+ checkPrecedes (narrow, users[6 ], users.skip (7 ));
582
618
});
583
619
584
620
test ('DmNarrow: DM recency > this-conversation recency or stream recency '
585
- 'or human vs. bot user' , () async {
621
+ 'or human vs. bot user or alphabetical order ' , () async {
586
622
final users = [
587
- eg.user (isBot: true ),
623
+ eg.user (isBot: true , fullName : 'Z' ),
588
624
eg.user (),
589
625
eg.user (),
590
626
eg.user (),
591
627
eg.user (),
592
628
eg.user (isBot: true ),
629
+ eg.user (fullName: 'ab' ),
630
+ eg.user (fullName: 'bc' ),
593
631
];
594
632
await prepare (users: users, messages: [
595
633
eg.dmMessage (from: users[3 ], to: [eg.selfUser]),
@@ -610,6 +648,7 @@ void main() {
610
648
checkPrecedes (narrow, users[1 ], users.skip (3 ));
611
649
checkPrecedes (narrow, users[2 ], users.skip (3 ));
612
650
checkPrecedes (narrow, users[4 ], users.skip (5 ));
651
+ checkPrecedes (narrow, users[6 ], users.skip (7 ));
613
652
}
614
653
});
615
654
@@ -648,6 +687,8 @@ void main() {
648
687
eg.user (userId: 5 , fullName: 'User Five' ),
649
688
eg.user (userId: 6 , fullName: 'User Six' , isBot: true ),
650
689
eg.user (userId: 7 , fullName: 'User Seven' ),
690
+ eg.user (userId: 8 , fullName: 'User Xy' , isBot: true ),
691
+ eg.user (userId: 9 , fullName: 'User Xz' , isBot: true ),
651
692
];
652
693
653
694
await prepare (users: users, messages: [
@@ -664,8 +705,9 @@ void main() {
664
705
// 1. Users most recent in the current topic/stream.
665
706
// 2. Users most recent in the DM conversations.
666
707
// 3. Human vs. Bot users (human users come first).
708
+ // 4. Alphabetical order.
667
709
check (await getResults (topicNarrow, MentionAutocompleteQuery ('' )))
668
- .deepEquals ([1 , 5 , 4 , 2 , 3 , 7 , 6 ]);
710
+ .deepEquals ([1 , 5 , 4 , 2 , 7 , 3 , 6 , 8 , 9 ]);
669
711
670
712
// Check the ranking applies also to results filtered by a query.
671
713
check (await getResults (topicNarrow, MentionAutocompleteQuery ('t' )))
@@ -674,6 +716,8 @@ void main() {
674
716
.deepEquals ([5 , 4 ]);
675
717
check (await getResults (topicNarrow, MentionAutocompleteQuery ('s' )))
676
718
.deepEquals ([7 , 6 ]);
719
+ check (await getResults (topicNarrow, MentionAutocompleteQuery ('user x' )))
720
+ .deepEquals ([8 , 9 ]);
677
721
});
678
722
});
679
723
}
0 commit comments