@@ -587,6 +587,37 @@ void main() {
587587 checkHasMessages (initialMessages);
588588 checkNotNotified ();
589589 });
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+ });
590621 });
591622
592623 group ('in topic narrow' , () {
@@ -674,6 +705,68 @@ void main() {
674705 checkNotNotified ();
675706 }));
676707 });
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+ }));
677770 });
678771
679772 group ('fetch races' , () {
0 commit comments