@@ -469,6 +469,154 @@ void main() {
469
469
}
470
470
}
471
471
});
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 ('to new channel' , () {
541
+ prepare ();
542
+ final newChannel = eg.stream ();
543
+ fillWithMessages (unreadMessages);
544
+
545
+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
546
+ origMessages: unreadMessages,
547
+ newStreamId: newChannel.streamId));
548
+ checkNotifiedOnce ();
549
+ checkMatchesMessages ([
550
+ for (final message in unreadMessages)
551
+ Message .fromJson (
552
+ message.toJson ()..['stream_id' ] = newChannel.streamId),
553
+ ]);
554
+ });
555
+
556
+ test ('from topic containing other unreads' , () {
557
+ prepare ();
558
+ final unreadMessage = eg.streamMessage (
559
+ stream: origChannel, topic: origTopic);
560
+ fillWithMessages ([...unreadMessages, unreadMessage]);
561
+
562
+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
563
+ origMessages: unreadMessages,
564
+ newTopicStr: newTopic));
565
+ checkNotifiedOnce ();
566
+ checkMatchesMessages ([
567
+ for (final message in unreadMessages)
568
+ Message .fromJson (message.toJson ()..['subject' ] = newTopic),
569
+ unreadMessage,
570
+ ]);
571
+ });
572
+
573
+ test ('to topic containing other unreads' , () {
574
+ prepare ();
575
+ final unreadMessage = eg.streamMessage (
576
+ stream: origChannel, topic: newTopic);
577
+ fillWithMessages ([...unreadMessages, unreadMessage]);
578
+
579
+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
580
+ origMessages: unreadMessages,
581
+ newTopicStr: newTopic));
582
+ checkNotifiedOnce ();
583
+ checkMatchesMessages ([
584
+ for (final message in unreadMessages)
585
+ Message .fromJson (message.toJson ()..['subject' ] = newTopic),
586
+ unreadMessage,
587
+ ]);
588
+ });
589
+
590
+ test ('tolerate unsorted messages' , () {
591
+ prepare ();
592
+ final unreadMessages = List .generate (10 ,
593
+ (i) => eg.streamMessage (id: 1000 - i, stream: origChannel, topic: origTopic));
594
+ fillWithMessages (unreadMessages);
595
+
596
+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
597
+ origMessages: unreadMessages,
598
+ newTopicStr: newTopic));
599
+ checkNotifiedOnce ();
600
+ checkMatchesMessages ([
601
+ for (final message in unreadMessages)
602
+ Message .fromJson (message.toJson ()..['subject' ] = newTopic)
603
+ ]);
604
+ });
605
+
606
+ test ('tolerate unreads unknown to the model' , () {
607
+ prepare ();
608
+ final unknownUnreadMessage = eg.streamMessage (
609
+ stream: eg.stream (), topic: origTopic);
610
+ fillWithMessages (unreadMessages);
611
+
612
+ model.handleUpdateMessageEvent (eg.updateMessageEventMoveFrom (
613
+ origMessages: [unknownUnreadMessage],
614
+ newTopicStr: newTopic));
615
+ checkNotNotified ();
616
+ checkMatchesMessages (unreadMessages);
617
+ });
618
+ });
619
+ });
472
620
});
473
621
474
622
0 commit comments