@@ -558,18 +558,20 @@ void main() {
558
558
}
559
559
}
560
560
561
- test ('TopicNarrow: topic recency > stream recency > DM recency '
562
- '> human vs. bot user > alphabetical order' , () async {
561
+ test ('TopicNarrow: topic recency > stream recency > DM recency > human/bot > name' , () async {
562
+ // The user with the greatest topic recency ranks last on each of the
563
+ // other criteria, but comes out first in the end, showing that
564
+ // topic recency comes first. Then among the remaining users, the one
565
+ // with the greatest stream recency ranks last on each of the remaining
566
+ // criteria, but comes out second in the end; and so on.
563
567
final users = [
564
- eg.user (fullName: 'Z' ),
565
- eg.user (),
566
- eg.user (isBot: true ),
567
- eg.user (),
568
- eg.user (),
569
- eg.user (),
570
- eg.user (isBot: true ),
571
- eg.user (fullName: 'ab' ),
572
- eg.user (fullName: 'bc' ),
568
+ eg.user (fullName: 'Z' , isBot: true ), // wins by topic recency
569
+ eg.user (fullName: 'Y' , isBot: true ), // runner-up, by stream recency
570
+ eg.user (fullName: 'X' , isBot: true ), // runner-up, by DM recency
571
+ eg.user (fullName: 'W' , isBot: false ), // runner-up, by human-vs-bot
572
+ eg.user (fullName: 'A' , isBot: true ), // runner-up, by name
573
+ eg.user (fullName: 'B' , isBot: true ), // tied because no remaining criteria
574
+ eg.user (fullName: 'b' , isBot: true ),
573
575
];
574
576
final stream = eg.stream ();
575
577
final narrow = TopicNarrow (stream.streamId, 'this' );
@@ -578,64 +580,71 @@ void main() {
578
580
eg.streamMessage (sender: users[0 ], stream: stream, topic: 'this' ),
579
581
eg.streamMessage (sender: users[2 ], stream: stream, topic: 'other' ),
580
582
eg.streamMessage (sender: users[1 ], stream: stream, topic: 'other' ),
581
- eg.dmMessage (from: users[3 ], to: [users[ 4 ] , eg.selfUser]),
583
+ eg.dmMessage (from: users[3 ], to: [... users. skip ( 4 ) , eg.selfUser]),
582
584
eg.dmMessage (from: users[2 ], to: [eg.selfUser]),
583
585
]);
584
586
checkPrecedes (narrow, users[0 ], users.skip (1 ));
585
587
checkPrecedes (narrow, users[1 ], users.skip (2 ));
586
588
checkPrecedes (narrow, users[2 ], users.skip (3 ));
587
- checkRankEqual (narrow, [ users[3 ], users[ 4 ]] );
588
- checkPrecedes (narrow, users[5 ], users.skip (6 ));
589
- checkPrecedes (narrow, users[7 ], users. skip ( 8 ) );
589
+ checkPrecedes (narrow, users[3 ], users. skip ( 4 ) );
590
+ checkPrecedes (narrow, users[4 ], users.skip (5 ));
591
+ checkRankEqual (narrow, [ users[5 ], users[ 6 ]] );
590
592
});
591
593
592
- test ('ChannelNarrow: stream recency > DM recency > human vs. bot user '
593
- '> alphabetical order' , () async {
594
+ test ('ChannelNarrow: stream recency > DM recency > human/ bot > name' , () async {
595
+ // Same principle as for TopicNarrow; see that test case above.
594
596
final users = [
595
- eg.user (isBot: true , fullName: 'Z' ),
596
- eg.user (),
597
- eg.user (),
598
- eg.user (),
599
- eg.user (),
600
- eg.user (isBot: true ),
601
- eg.user (fullName: 'ab' , isBot: true ),
602
- eg.user (fullName: 'bc' , isBot: true ),
597
+ eg.user (fullName: 'Z' , isBot: true ), // wins by stream recency
598
+ eg.user (fullName: 'Y' , isBot: true ), // runner-up, by DM recency
599
+ eg.user (fullName: 'X' , isBot: false ), // runner-up, by human-vs-bot
600
+ eg.user (fullName: 'A' , isBot: true ), // runner-up, by name
601
+ eg.user (fullName: 'B' , isBot: true ), // tied because no remaining criteria
602
+ eg.user (fullName: 'b' , isBot: true ),
603
603
];
604
604
final stream = eg.stream ();
605
605
final narrow = ChannelNarrow (stream.streamId);
606
606
await prepare (users: users, messages: [
607
607
eg.streamMessage (sender: users[1 ], stream: stream),
608
608
eg.streamMessage (sender: users[0 ], stream: stream),
609
- eg.dmMessage (from: users[2 ], to: [users[ 3 ] , eg.selfUser]),
609
+ eg.dmMessage (from: users[2 ], to: [... users. skip ( 3 ) , eg.selfUser]),
610
610
eg.dmMessage (from: users[1 ], to: [eg.selfUser]),
611
- eg.dmMessage (from: users[4 ], to: [users[5 ], eg.selfUser]),
612
611
]);
613
612
checkPrecedes (narrow, users[0 ], users.skip (1 ));
614
613
checkPrecedes (narrow, users[1 ], users.skip (2 ));
615
- checkRankEqual (narrow, [ users[2 ], users[ 3 ]] );
616
- checkPrecedes (narrow, users[4 ], users.skip (5 ));
617
- checkPrecedes (narrow, users[6 ], users. skip ( 7 ) );
614
+ checkPrecedes (narrow, users[2 ], users. skip ( 3 ) );
615
+ checkPrecedes (narrow, users[3 ], users.skip (4 ));
616
+ checkRankEqual (narrow, [ users[4 ], users[ 5 ]] );
618
617
});
619
618
620
- test ('DmNarrow: DM recency > this-conversation recency or stream recency '
621
- 'or human vs. bot user or alphabetical order' , () async {
619
+ test ('DmNarrow: DM recency > human/bot > name, ignore this-conversation recency and stream recency' , () async {
620
+ // Same principle as for TopicNarrow; see that test case above.
622
621
final users = [
623
- eg.user (isBot: true , fullName: 'Z' ),
624
- eg.user (),
625
- eg.user (),
626
- eg.user (),
627
- eg.user (),
628
- eg.user (isBot: true ),
629
- eg.user (fullName: 'ab' ),
630
- eg.user (fullName: 'bc' ),
622
+ // First user wins by DM recency.
623
+ eg.user (fullName: 'Z' , isBot: true ),
624
+ // Next two are runners-up by DM recency, and have a two-way tie
625
+ // despite different this-conversation recency (because that doesn't count).
626
+ eg.user (fullName: 'Y' , isBot: true ),
627
+ eg.user (fullName: 'y' , isBot: true ),
628
+ // Next user is the runner-up due to DM recency, and comes after the
629
+ // above users even when it has greater this-conversation recency
630
+ // (because that doesn't count).
631
+ eg.user (fullName: 'X' , isBot: true ),
632
+ // Remainder have no DM recency and so come later.
633
+ // Next user is the runner-up due to human-vs-bot.
634
+ eg.user (fullName: 'W' , isBot: false ),
635
+ // Next user is the runner-up due to name.
636
+ eg.user (fullName: 'A' , isBot: true ),
637
+ // Remaining users are tied, even though they differ in stream recency
638
+ // (because that doesn't count).
639
+ eg.user (fullName: 'B' , isBot: true ),
640
+ eg.user (fullName: 'b' , isBot: true ),
631
641
];
632
642
await prepare (users: users, messages: [
633
643
eg.dmMessage (from: users[3 ], to: [eg.selfUser]),
634
644
eg.dmMessage (from: users[1 ], to: [users[2 ], eg.selfUser]),
635
645
eg.dmMessage (from: users[0 ], to: [eg.selfUser]),
636
- eg.streamMessage (sender: users[1 ]),
637
- eg.streamMessage (sender: users[2 ]),
638
- eg.streamMessage (sender: users[3 ]),
646
+ for (final user in users.skip (1 ))
647
+ eg.streamMessage (sender: user),
639
648
]);
640
649
for (final narrow in [
641
650
DmNarrow .withUser (users[3 ].userId, selfUserId: eg.selfUser.userId),
@@ -647,8 +656,10 @@ void main() {
647
656
checkRankEqual (narrow, [users[1 ], users[2 ]]);
648
657
checkPrecedes (narrow, users[1 ], users.skip (3 ));
649
658
checkPrecedes (narrow, users[2 ], users.skip (3 ));
659
+ checkPrecedes (narrow, users[3 ], users.skip (4 ));
650
660
checkPrecedes (narrow, users[4 ], users.skip (5 ));
651
- checkPrecedes (narrow, users[6 ], users.skip (7 ));
661
+ checkPrecedes (narrow, users[5 ], users.skip (6 ));
662
+ checkRankEqual (narrow, [users[6 ], users[7 ]]);
652
663
}
653
664
});
654
665
0 commit comments