@@ -810,38 +810,38 @@ void main() async {
810
810
]);
811
811
});
812
812
813
- group ('canShareRecipientHeader ' , () {
814
- test ('stream messages vs DMs, no share ' , () {
813
+ group ('haveSameRecipient ' , () {
814
+ test ('stream messages vs DMs, no match ' , () {
815
815
final dmMessage = eg.dmMessage (from: eg.selfUser, to: [eg.otherUser]);
816
- final streamMessage = eg.streamMessage (timestamp : dmMessage.timestamp );
817
- check (canShareRecipientHeader (streamMessage, dmMessage)).isFalse ();
818
- check (canShareRecipientHeader (dmMessage, streamMessage)).isFalse ();
816
+ final streamMessage = eg.streamMessage ();
817
+ check (haveSameRecipient (streamMessage, dmMessage)).isFalse ();
818
+ check (haveSameRecipient (dmMessage, streamMessage)).isFalse ();
819
819
});
820
820
821
- test ('stream messages of same day share just if same stream/topic' , () {
821
+ test ('stream messages match just if same stream/topic' , () {
822
822
final stream0 = eg.stream (streamId: 123 );
823
823
final stream1 = eg.stream (streamId: 234 );
824
824
final messageAB = eg.streamMessage (stream: stream0, topic: 'foo' );
825
- final messageXB = eg.streamMessage (stream: stream1, topic: 'foo' , timestamp : messageAB.timestamp );
826
- final messageAX = eg.streamMessage (stream: stream0, topic: 'bar' , timestamp : messageAB.timestamp );
827
- check (canShareRecipientHeader (messageAB, messageAB)).isTrue ();
828
- check (canShareRecipientHeader (messageAB, messageXB)).isFalse ();
829
- check (canShareRecipientHeader (messageXB, messageAB)).isFalse ();
830
- check (canShareRecipientHeader (messageAB, messageAX)).isFalse ();
831
- check (canShareRecipientHeader (messageAX, messageAB)).isFalse ();
832
- check (canShareRecipientHeader (messageAX, messageXB)).isFalse ();
833
- check (canShareRecipientHeader (messageXB, messageAX)).isFalse ();
825
+ final messageXB = eg.streamMessage (stream: stream1, topic: 'foo' );
826
+ final messageAX = eg.streamMessage (stream: stream0, topic: 'bar' );
827
+ check (haveSameRecipient (messageAB, messageAB)).isTrue ();
828
+ check (haveSameRecipient (messageAB, messageXB)).isFalse ();
829
+ check (haveSameRecipient (messageXB, messageAB)).isFalse ();
830
+ check (haveSameRecipient (messageAB, messageAX)).isFalse ();
831
+ check (haveSameRecipient (messageAX, messageAB)).isFalse ();
832
+ check (haveSameRecipient (messageAX, messageXB)).isFalse ();
833
+ check (haveSameRecipient (messageXB, messageAX)).isFalse ();
834
834
});
835
835
836
- test ('DMs of same day share just if same recipients' , () {
836
+ test ('DMs match just if same recipients' , () {
837
837
final message0 = eg.dmMessage (from: eg.selfUser, to: []);
838
- final message01 = eg.dmMessage (from: eg.selfUser, to: [eg.otherUser], timestamp : message0.timestamp );
839
- final message10 = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser], timestamp : message0.timestamp );
840
- final message02 = eg.dmMessage (from: eg.selfUser, to: [eg.thirdUser], timestamp : message0.timestamp );
841
- final message20 = eg.dmMessage (from: eg.thirdUser, to: [eg.selfUser], timestamp : message0.timestamp );
842
- final message012 = eg.dmMessage (from: eg.selfUser, to: [eg.otherUser, eg.thirdUser], timestamp : message0.timestamp );
843
- final message102 = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser, eg.thirdUser], timestamp : message0.timestamp );
844
- final message201 = eg.dmMessage (from: eg.thirdUser, to: [eg.selfUser, eg.otherUser], timestamp : message0.timestamp );
838
+ final message01 = eg.dmMessage (from: eg.selfUser, to: [eg.otherUser]);
839
+ final message10 = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser]);
840
+ final message02 = eg.dmMessage (from: eg.selfUser, to: [eg.thirdUser]);
841
+ final message20 = eg.dmMessage (from: eg.thirdUser, to: [eg.selfUser]);
842
+ final message012 = eg.dmMessage (from: eg.selfUser, to: [eg.otherUser, eg.thirdUser]);
843
+ final message102 = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser, eg.thirdUser]);
844
+ final message201 = eg.dmMessage (from: eg.thirdUser, to: [eg.selfUser, eg.otherUser]);
845
845
final groups = [[message0], [message01, message10],
846
846
[message02, message20], [message012, message102, message201]];
847
847
for (int i0 = 0 ; i0 < groups.length; i0++ ) {
@@ -852,52 +852,52 @@ void main() async {
852
852
final message1 = groups[i1][j1];
853
853
check (
854
854
because: 'recipients ${message0 .allRecipientIds } vs ${message1 .allRecipientIds }' ,
855
- canShareRecipientHeader (message0, message1),
855
+ haveSameRecipient (message0, message1),
856
856
).equals (i0 == i1);
857
857
}
858
858
}
859
859
}
860
860
}
861
861
});
862
+ });
862
863
863
- test ('messages to same recipient share just if same day' , () {
864
- // These timestamps will differ depending on the timezone of the
865
- // environment where the tests are run, in order to give the same results
866
- // in the code under test which is also based on the ambient timezone.
867
- // TODO(dart): It'd be great if tests could control the ambient timezone,
868
- // so as to exercise cases like where local time falls back across midnight.
869
- int timestampFromLocalTime (String date) => DateTime .parse (date).millisecondsSinceEpoch ~ / 1000 ;
870
-
871
- const t111a = '2021-01-01 00:00:00' ;
872
- const t111b = '2021-01-01 12:00:00' ;
873
- const t111c = '2021-01-01 23:59:58' ;
874
- const t111d = '2021-01-01 23:59:59' ;
875
- const t112a = '2021-01-02 00:00:00' ;
876
- const t112b = '2021-01-02 00:00:01' ;
877
- const t121 = '2021-02-01 00:00:00' ;
878
- const t211 = '2022-01-01 00:00:00' ;
879
- final groups = [[t111a, t111b, t111c, t111d], [t112a, t112b], [t121], [t211]];
880
-
881
- final stream = eg.stream ();
882
- for (int i0 = 0 ; i0 < groups.length; i0++ ) {
883
- for (int i1 = i0; i1 < groups.length; i1++ ) {
884
- for (int j0 = 0 ; j0 < groups[i0].length; j0++ ) {
885
- for (int j1 = (i0 == i1) ? j0 : 0 ; j1 < groups[i1].length; j1++ ) {
886
- final time0 = groups[i0][j0];
887
- final time1 = groups[i1][j1];
888
- check (because: 'times $time0 , $time1 ' , canShareRecipientHeader (
889
- eg.streamMessage (stream: stream, topic: 'foo' , timestamp: timestampFromLocalTime (time0)),
890
- eg.streamMessage (stream: stream, topic: 'foo' , timestamp: timestampFromLocalTime (time1)),
891
- )).equals (i0 == i1);
892
- check (because: 'times $time0 , $time1 ' , canShareRecipientHeader (
893
- eg.dmMessage (from: eg.selfUser, to: [], timestamp: timestampFromLocalTime (time0)),
894
- eg.dmMessage (from: eg.selfUser, to: [], timestamp: timestampFromLocalTime (time1)),
895
- )).equals (i0 == i1);
896
- }
864
+ test ('messagesSameDay' , () {
865
+ // These timestamps will differ depending on the timezone of the
866
+ // environment where the tests are run, in order to give the same results
867
+ // in the code under test which is also based on the ambient timezone.
868
+ // TODO(dart): It'd be great if tests could control the ambient timezone,
869
+ // so as to exercise cases like where local time falls back across midnight.
870
+ int timestampFromLocalTime (String date) => DateTime .parse (date).millisecondsSinceEpoch ~ / 1000 ;
871
+
872
+ const t111a = '2021-01-01 00:00:00' ;
873
+ const t111b = '2021-01-01 12:00:00' ;
874
+ const t111c = '2021-01-01 23:59:58' ;
875
+ const t111d = '2021-01-01 23:59:59' ;
876
+ const t112a = '2021-01-02 00:00:00' ;
877
+ const t112b = '2021-01-02 00:00:01' ;
878
+ const t121 = '2021-02-01 00:00:00' ;
879
+ const t211 = '2022-01-01 00:00:00' ;
880
+ final groups = [[t111a, t111b, t111c, t111d], [t112a, t112b], [t121], [t211]];
881
+
882
+ final stream = eg.stream ();
883
+ for (int i0 = 0 ; i0 < groups.length; i0++ ) {
884
+ for (int i1 = i0; i1 < groups.length; i1++ ) {
885
+ for (int j0 = 0 ; j0 < groups[i0].length; j0++ ) {
886
+ for (int j1 = (i0 == i1) ? j0 : 0 ; j1 < groups[i1].length; j1++ ) {
887
+ final time0 = groups[i0][j0];
888
+ final time1 = groups[i1][j1];
889
+ check (because: 'times $time0 , $time1 ' , messagesSameDay (
890
+ eg.streamMessage (stream: stream, topic: 'foo' , timestamp: timestampFromLocalTime (time0)),
891
+ eg.streamMessage (stream: stream, topic: 'foo' , timestamp: timestampFromLocalTime (time1)),
892
+ )).equals (i0 == i1);
893
+ check (because: 'times $time0 , $time1 ' , messagesSameDay (
894
+ eg.dmMessage (from: eg.selfUser, to: [], timestamp: timestampFromLocalTime (time0)),
895
+ eg.dmMessage (from: eg.selfUser, to: [], timestamp: timestampFromLocalTime (time1)),
896
+ )).equals (i0 == i1);
897
897
}
898
898
}
899
899
}
900
- });
900
+ }
901
901
});
902
902
}
903
903
@@ -948,7 +948,8 @@ void checkInvariants(MessageListView model) {
948
948
for (int j = 0 ; j < model.messages.length; j++ ) {
949
949
bool isFirstInBlock = false ;
950
950
if (j == 0
951
- || ! canShareRecipientHeader (model.messages[j- 1 ], model.messages[j])) {
951
+ || ! haveSameRecipient (model.messages[j- 1 ], model.messages[j])
952
+ || ! messagesSameDay (model.messages[j- 1 ], model.messages[j])) {
952
953
check (model.items[i++ ]).isA <MessageListRecipientHeaderItem >()
953
954
.message.identicalTo (model.messages[j]);
954
955
isFirstInBlock = true ;
0 commit comments