@@ -469,6 +469,128 @@ void main() {
469469 }
470470 }
471471 });
472+
473+ group ('moves' , () {
474+ final origChannel = eg.stream ();
475+ const origTopic = 'origTopic' ;
476+ const newTopic = 'newTopic' ;
477+
478+ group ('move read messages' , () {
479+ final readMessages = List <StreamMessage >.generate (10 ,
480+ (_) => eg.streamMessage (
481+ stream: origChannel, topic: origTopic, flags: [MessageFlag .read]));
482+
483+ test ('to new topic' , () {
484+ prepare ();
485+ fillWithMessages (readMessages);
486+
487+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
488+ origMessages: readMessages,
489+ newTopicStr: newTopic));
490+ checkNotNotified ();
491+ checkMatchesMessages ([]);
492+ });
493+
494+ test ('from topic with unreads' , () {
495+ prepare ();
496+ final unreadMessage = eg.streamMessage (
497+ stream: origChannel, topic: origTopic);
498+ fillWithMessages ([...readMessages, unreadMessage]);
499+
500+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
501+ origMessages: readMessages,
502+ newTopicStr: newTopic));
503+ checkNotNotified ();
504+ checkMatchesMessages ([unreadMessage]);
505+ });
506+
507+ test ('to topic with unreads' , () {
508+ prepare ();
509+ final unreadMessage = eg.streamMessage (
510+ stream: origChannel, topic: newTopic);
511+ fillWithMessages ([...readMessages, unreadMessage]);
512+
513+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
514+ origMessages: readMessages,
515+ newTopicStr: newTopic,
516+ ));
517+ checkNotNotified ();
518+ checkMatchesMessages ([unreadMessage]);
519+ });
520+ });
521+
522+ group ('move unread messages' , () {
523+ final unreadMessages = List <StreamMessage >.generate (10 ,
524+ (_) => eg.streamMessage (stream: origChannel, topic: origTopic));
525+
526+ test ('to new topic' , () {
527+ prepare ();
528+ fillWithMessages (unreadMessages);
529+
530+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
531+ origMessages: unreadMessages,
532+ newTopicStr: newTopic));
533+ checkNotifiedOnce ();
534+ checkMatchesMessages ([
535+ for (final message in unreadMessages)
536+ Message .fromJson (message.toJson ()..['subject' ] = newTopic),
537+ ]);
538+ });
539+
540+ test ('from topic with unreads' , () {
541+ prepare ();
542+ final unreadMessage = eg.streamMessage (
543+ stream: origChannel, topic: origTopic);
544+ fillWithMessages ([...unreadMessages, unreadMessage]);
545+
546+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
547+ origMessages: unreadMessages,
548+ newTopicStr: newTopic));
549+ checkNotifiedOnce ();
550+ checkMatchesMessages ([
551+ for (final message in unreadMessages)
552+ Message .fromJson (message.toJson ()..['subject' ] = newTopic),
553+ unreadMessage,
554+ ]);
555+ });
556+
557+ test ('to topic with unreads' , () {
558+ prepare ();
559+ final unreadMessage = eg.streamMessage (
560+ stream: origChannel, topic: newTopic);
561+ fillWithMessages ([...unreadMessages, unreadMessage]);
562+
563+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
564+ origMessages: unreadMessages,
565+ newTopicStr: newTopic));
566+ checkNotifiedOnce ();
567+ checkMatchesMessages ([
568+ for (final message in unreadMessages)
569+ Message .fromJson (message.toJson ()..['subject' ] = newTopic),
570+ unreadMessage,
571+ ]);
572+ });
573+
574+ test ('to new channel' , () {
575+ final message = eg.streamMessage (
576+ id: 1 , stream: origChannel, topic: origTopic);
577+ final newChannel = eg.stream ();
578+ prepare ();
579+ fillWithMessages ([message]);
580+
581+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
582+ origMessages: [message],
583+ newStreamId: newChannel.streamId,
584+ newTopicStr: newTopic));
585+ checkNotifiedOnce ();
586+ checkMatchesMessages ([
587+ Message .fromJson (message.toJson ()
588+ ..['stream_id' ] = newChannel.streamId
589+ ..['subject' ] = newTopic),
590+ ]);
591+ });
592+ });
593+ });
472594 });
473595
474596
0 commit comments