@@ -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
@@ -655,6 +694,8 @@ void main() {
655
694
eg.user (userId: 5 , fullName: 'User Five' ),
656
695
eg.user (userId: 6 , fullName: 'User Six' , isBot: true ),
657
696
eg.user (userId: 7 , fullName: 'User Seven' ),
697
+ eg.user (userId: 8 , fullName: 'User Xy' , isBot: true ),
698
+ eg.user (userId: 9 , fullName: 'User Xz' , isBot: true ),
658
699
];
659
700
660
701
await prepare (users: users, messages: [
@@ -671,8 +712,9 @@ void main() {
671
712
// 1. Users most recent in the current topic/stream.
672
713
// 2. Users most recent in the DM conversations.
673
714
// 3. Human vs. Bot users (human users come first).
715
+ // 4. Alphabetical order.
674
716
check (await getResults (topicNarrow, MentionAutocompleteQuery ('' )))
675
- .deepEquals ([1 , 5 , 4 , 2 , 3 , 7 , 6 ]);
717
+ .deepEquals ([1 , 5 , 4 , 2 , 7 , 3 , 6 , 8 , 9 ]);
676
718
677
719
// Check the ranking applies also to results filtered by a query.
678
720
check (await getResults (topicNarrow, MentionAutocompleteQuery ('t' )))
@@ -681,6 +723,8 @@ void main() {
681
723
.deepEquals ([5 , 4 ]);
682
724
check (await getResults (topicNarrow, MentionAutocompleteQuery ('s' )))
683
725
.deepEquals ([7 , 6 ]);
726
+ check (await getResults (topicNarrow, MentionAutocompleteQuery ('user x' )))
727
+ .deepEquals ([8 , 9 ]);
684
728
});
685
729
});
686
730
}
0 commit comments