@@ -587,6 +587,37 @@ void main() {
587
587
checkHasMessages (initialMessages);
588
588
checkNotNotified ();
589
589
});
590
+
591
+ void testMessageMove (PropagateMode propagateMode) => awaitFakeAsync ((async ) async {
592
+ await prepareNarrow (narrow, initialMessages + movedMessages);
593
+ connection.prepare (delay: const Duration (seconds: 1 ), json: newestResult (
594
+ foundOldest: false ,
595
+ messages: movedMessages,
596
+ ).toJson ());
597
+ await store.handleEvent (eg.updateMessageEventMoveFrom (
598
+ origMessages: movedMessages,
599
+ newTopic: 'new' ,
600
+ newStreamId: otherStream.streamId,
601
+ propagateMode: propagateMode,
602
+ ));
603
+ checkNotifiedOnce ();
604
+ async .elapse (const Duration (seconds: 1 ));
605
+ checkHasMessages (initialMessages);
606
+ check (model).narrow.equals (ChannelNarrow (stream.streamId));
607
+ checkNotNotified ();
608
+ });
609
+
610
+ test ('do not follow when propagateMode = changeOne' , () {
611
+ testMessageMove (PropagateMode .changeOne);
612
+ });
613
+
614
+ test ('do not follow when propagateMode = changeLater' , () {
615
+ testMessageMove (PropagateMode .changeLater);
616
+ });
617
+
618
+ test ('do not follow when propagateMode = changeAll' , () {
619
+ testMessageMove (PropagateMode .changeAll);
620
+ });
590
621
});
591
622
592
623
group ('in topic narrow' , () {
@@ -674,6 +705,68 @@ void main() {
674
705
checkNotNotified ();
675
706
}));
676
707
});
708
+
709
+ void handleMoveEvent (PropagateMode propagateMode) => awaitFakeAsync ((async ) async {
710
+ await prepareNarrow (narrow, initialMessages + movedMessages);
711
+ connection.prepare (delay: const Duration (seconds: 1 ), json: newestResult (
712
+ foundOldest: false ,
713
+ messages: movedMessages,
714
+ ).toJson ());
715
+ await store.handleEvent (eg.updateMessageEventMoveFrom (
716
+ origMessages: movedMessages,
717
+ newTopic: 'new' ,
718
+ newStreamId: otherStream.streamId,
719
+ propagateMode: propagateMode,
720
+ ));
721
+ checkNotifiedOnce ();
722
+ async .elapse (const Duration (seconds: 1 ));
723
+ });
724
+
725
+ test ('do not follow to the new narrow when propagateMode = changeOne' , () {
726
+ handleMoveEvent (PropagateMode .changeOne);
727
+ checkNotNotified ();
728
+ checkHasMessages (initialMessages);
729
+ check (model).narrow.equals (TopicNarrow (stream.streamId, 'topic' ));
730
+ });
731
+
732
+ test ('follow to the new narrow when propagateMode = changeLater' , () {
733
+ handleMoveEvent (PropagateMode .changeLater);
734
+ checkNotifiedOnce ();
735
+ checkHasMessages (movedMessages);
736
+ check (model).narrow.equals (TopicNarrow (otherStream.streamId, 'new' ));
737
+ });
738
+
739
+ test ('follow to the new narrow when propagateMode = changeAll' , () {
740
+ handleMoveEvent (PropagateMode .changeAll);
741
+ checkNotifiedOnce ();
742
+ checkHasMessages (movedMessages);
743
+ check (model).narrow.equals (TopicNarrow (otherStream.streamId, 'new' ));
744
+ });
745
+
746
+ test ('handle move event before initial fetch' , () => awaitFakeAsync ((async ) async {
747
+ await prepare (narrow: narrow);
748
+ final subscription = eg.subscription (stream);
749
+ await store.addStream (stream);
750
+ await store.addSubscription (subscription);
751
+ final followedMessage = eg.streamMessage (stream: stream, topic: 'new' );
752
+
753
+ connection.prepare (delay: const Duration (seconds: 2 ), json: newestResult (
754
+ foundOldest: true ,
755
+ messages: [followedMessage],
756
+ ).toJson ());
757
+
758
+ check (model).fetched.isFalse ();
759
+ checkHasMessages ([]);
760
+ await store.handleEvent (eg.updateMessageEventMoveTo (
761
+ origTopic: 'topic' ,
762
+ newMessages: [followedMessage],
763
+ propagateMode: PropagateMode .changeAll,
764
+ ));
765
+ check (model).narrow.equals (TopicNarrow (stream.streamId, 'new' ));
766
+
767
+ async .elapse (const Duration (seconds: 2 ));
768
+ checkHasMessages ([followedMessage]);
769
+ }));
677
770
});
678
771
679
772
group ('fetch races' , () {
0 commit comments