@@ -26,9 +26,9 @@ import 'package:zulip/widgets/message_list.dart';
26
26
import 'package:zulip/widgets/page.dart' ;
27
27
import 'package:zulip/widgets/theme.dart' ;
28
28
29
+ import '../example_data.dart' as eg;
29
30
import '../fake_async.dart' ;
30
31
import '../model/binding.dart' ;
31
- import '../example_data.dart' as eg;
32
32
import '../model/narrow_checks.dart' ;
33
33
import '../stdlib_checks.dart' ;
34
34
import '../test_images.dart' ;
@@ -481,7 +481,11 @@ void main() {
481
481
await init ();
482
482
final stream = eg.stream ();
483
483
final message = eg.streamMessage (stream: stream);
484
- await checkNotifications (async , messageFcmMessage (message, streamName: stream.name),
484
+ final data = messageFcmMessage (message, streamName: stream.name);
485
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId));
486
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
487
+
488
+ await checkNotifications (async , data,
485
489
expectedIsGroupConversation: true ,
486
490
expectedTitle: '#${stream .name } > ${message .topic }' ,
487
491
expectedTagComponent: 'stream:${message .streamId }:${message .topic }' );
@@ -493,6 +497,9 @@ void main() {
493
497
const topic = 'topic 1' ;
494
498
final message1 = eg.streamMessage (topic: topic, stream: stream);
495
499
final data1 = messageFcmMessage (message1, streamName: stream.name);
500
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId));
501
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
502
+
496
503
final message2 = eg.streamMessage (topic: topic, stream: stream);
497
504
final data2 = messageFcmMessage (message2, streamName: stream.name);
498
505
final message3 = eg.streamMessage (topic: topic, stream: stream);
@@ -530,6 +537,9 @@ void main() {
530
537
const topicB = 'topic B' ;
531
538
final message1 = eg.streamMessage (topic: topicA, stream: stream);
532
539
final data1 = messageFcmMessage (message1, streamName: stream.name);
540
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId));
541
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
542
+
533
543
final message2 = eg.streamMessage (topic: topicB, stream: stream);
534
544
final data2 = messageFcmMessage (message2, streamName: stream.name);
535
545
final message3 = eg.streamMessage (topic: topicA, stream: stream);
@@ -564,6 +574,9 @@ void main() {
564
574
const topic2 = 'a TOpic' ;
565
575
final message1 = eg.streamMessage (topic: topic1, stream: stream);
566
576
final data1 = messageFcmMessage (message1, streamName: stream.name);
577
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId));
578
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
579
+
567
580
final message2 = eg.streamMessage (topic: topic2, stream: stream);
568
581
final data2 = messageFcmMessage (message2, streamName: stream.name);
569
582
@@ -589,13 +602,15 @@ void main() {
589
602
const topic = 'topic' ;
590
603
final message1 = eg.streamMessage (topic: topic, stream: stream);
591
604
final data1 = messageFcmMessage (message1, streamName: stream.name);
605
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId));
606
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
592
607
593
608
receiveFcmMessage (async , data1);
594
609
checkNotification (data1,
595
610
messageStyleMessages: [data1],
596
611
expectedIsGroupConversation: true ,
597
612
expectedTitle: '#Before > $topic ' ,
598
- expectedTagComponent: 'stream:${stream .streamId }:$topic ' );
613
+ expectedTagComponent: 'stream:${stream .streamId }:${ topic . toLowerCase ()} ' );
599
614
600
615
stream = eg.stream (streamId: 1 , name: 'After' );
601
616
final message2 = eg.streamMessage (topic: topic, stream: stream);
@@ -606,13 +621,17 @@ void main() {
606
621
messageStyleMessages: [data1, data2],
607
622
expectedIsGroupConversation: true ,
608
623
expectedTitle: '#After > $topic ' ,
609
- expectedTagComponent: 'stream:${stream .streamId }:$topic ' );
624
+ expectedTagComponent: 'stream:${stream .streamId }:${ topic . toLowerCase ()} ' );
610
625
})));
611
626
612
627
test ('stream message: stream name omitted' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
613
628
await init ();
614
629
final stream = eg.stream ();
615
630
final message = eg.streamMessage (stream: stream);
631
+ final data = messageFcmMessage (message, streamName: null );
632
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId));
633
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
634
+
616
635
await checkNotifications (async , messageFcmMessage (message, streamName: null ),
617
636
expectedIsGroupConversation: true ,
618
637
expectedTitle: '#(unknown channel) > ${message .topic }' ,
@@ -622,7 +641,11 @@ void main() {
622
641
test ('group DM: 3 users' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
623
642
await init ();
624
643
final message = eg.dmMessage (from: eg.thirdUser, to: [eg.otherUser, eg.selfUser]);
625
- await checkNotifications (async , messageFcmMessage (message),
644
+ final data = messageFcmMessage (message);
645
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId));
646
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
647
+
648
+ await checkNotifications (async , data,
626
649
expectedIsGroupConversation: true ,
627
650
expectedTitle: "${eg .thirdUser .fullName } to you and 1 other" ,
628
651
expectedTagComponent: 'dm:${message .allRecipientIds .join ("," )}' );
@@ -632,7 +655,11 @@ void main() {
632
655
await init ();
633
656
final message = eg.dmMessage (from: eg.thirdUser,
634
657
to: [eg.otherUser, eg.selfUser, eg.fourthUser]);
635
- await checkNotifications (async , messageFcmMessage (message),
658
+ final data = messageFcmMessage (message);
659
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId));
660
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
661
+
662
+ await checkNotifications (async , data,
636
663
expectedIsGroupConversation: true ,
637
664
expectedTitle: "${eg .thirdUser .fullName } to you and 2 others" ,
638
665
expectedTagComponent: 'dm:${message .allRecipientIds .join ("," )}' );
@@ -642,6 +669,8 @@ void main() {
642
669
await init ();
643
670
final message1 = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser, eg.thirdUser]);
644
671
final data1 = messageFcmMessage (message1);
672
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId), realmUrl: data1.realmUrl);
673
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
645
674
final message2 = eg.dmMessage (from: eg.thirdUser, to: [eg.selfUser, eg.otherUser]);
646
675
final data2 = messageFcmMessage (message2);
647
676
@@ -665,7 +694,11 @@ void main() {
665
694
test ('1:1 DM' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
666
695
await init ();
667
696
final message = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser]);
668
- await checkNotifications (async , messageFcmMessage (message),
697
+ final data = messageFcmMessage (message);
698
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId), realmUrl: data.realmUrl);
699
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
700
+
701
+ await checkNotifications (async , data,
669
702
expectedIsGroupConversation: false ,
670
703
expectedTitle: eg.otherUser.fullName,
671
704
expectedTagComponent: 'dm:${message .allRecipientIds .join ("," )}' );
@@ -676,6 +709,8 @@ void main() {
676
709
final otherUser = eg.user (fullName: 'Before' );
677
710
final message1 = eg.dmMessage (from: otherUser, to: [eg.selfUser]);
678
711
final data1 = messageFcmMessage (message1);
712
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId), realmUrl: data1.realmUrl);
713
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
679
714
680
715
final expectedTagComponent = 'dm:${message1 .allRecipientIds .join ("," )}' ;
681
716
@@ -703,6 +738,8 @@ void main() {
703
738
final otherUser
= eg.
user (email
: '[email protected] ' );
704
739
final message1 = eg.dmMessage (from: otherUser, to: [eg.selfUser]);
705
740
final data1 = messageFcmMessage (message1);
741
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId), realmUrl: data1.realmUrl);
742
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
706
743
707
744
final expectedTagComponent = 'dm:${message1 .allRecipientIds .join ("," )}' ;
708
745
@@ -730,6 +767,9 @@ void main() {
730
767
await init ();
731
768
final message = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser]);
732
769
final data = messageFcmMessage (message);
770
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId), realmUrl: data.realmUrl);
771
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
772
+
733
773
receiveFcmMessage (async , data);
734
774
checkNotification (data,
735
775
messageStyleMessages: [data],
@@ -746,6 +786,9 @@ void main() {
746
786
await init ();
747
787
final message = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser]);
748
788
final data = messageFcmMessage (message);
789
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId), realmUrl: data.realmUrl);
790
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
791
+
749
792
receiveFcmMessage (async , data);
750
793
checkNotification (data,
751
794
messageStyleMessages: [data],
@@ -760,7 +803,11 @@ void main() {
760
803
test ('self-DM' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
761
804
await init ();
762
805
final message = eg.dmMessage (from: eg.selfUser, to: []);
763
- await checkNotifications (async , messageFcmMessage (message),
806
+ final data = messageFcmMessage (message);
807
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId), realmUrl: data.realmUrl);
808
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
809
+
810
+ await checkNotifications (async , data,
764
811
expectedIsGroupConversation: false ,
765
812
expectedTitle: eg.selfUser.fullName,
766
813
expectedTagComponent: 'dm:${message .allRecipientIds .join ("," )}' );
@@ -770,6 +817,8 @@ void main() {
770
817
await init ();
771
818
final message = eg.streamMessage ();
772
819
final data = messageFcmMessage (message);
820
+ final account = eg.account (id: data.userId, user: eg.user (userId: data.userId), realmUrl: data.realmUrl);
821
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
773
822
final expectedGroupKey = '${data .realmUrl }|${data .userId }' ;
774
823
775
824
check (testBinding.androidNotificationHost.activeNotifications).isEmpty ();
@@ -803,6 +852,8 @@ void main() {
803
852
const topicA = 'Topic A' ;
804
853
final message1 = eg.streamMessage (stream: stream, topic: topicA);
805
854
final data1 = messageFcmMessage (message1, streamName: stream.name);
855
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId), realmUrl: data1.realmUrl);
856
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
806
857
final message2 = eg.streamMessage (stream: stream, topic: topicA);
807
858
final data2 = messageFcmMessage (message2, streamName: stream.name);
808
859
final message3 = eg.streamMessage (stream: stream, topic: topicA);
@@ -839,6 +890,8 @@ void main() {
839
890
const topicA = 'Topic A' ;
840
891
final message1 = eg.streamMessage (stream: stream, topic: topicA);
841
892
final data1 = messageFcmMessage (message1, streamName: stream.name);
893
+ final account = eg.account (id: data1.userId, user: eg.user (userId: data1.userId), realmUrl: data1.realmUrl);
894
+ await testBinding.globalStore.add (account, eg.initialSnapshot ());
842
895
final conversationKey1 = 'stream:${stream .streamId }:${topicA .toLowerCase ()}' ;
843
896
final expectedGroupKey = '${data1 .realmUrl }|${data1 .userId }' ;
844
897
@@ -881,6 +934,7 @@ void main() {
881
934
realmUrl: Uri .parse ('https://1.chat.example' ),
882
935
id: 1001 ,
883
936
user: eg.user (userId: 1001 ));
937
+ await testBinding.globalStore.add (account1, eg.initialSnapshot ());
884
938
final message1 = eg.streamMessage (id: 1000 , stream: stream, topic: topic);
885
939
final data1 =
886
940
messageFcmMessage (message1, account: account1, streamName: stream.name);
@@ -890,6 +944,7 @@ void main() {
890
944
realmUrl: Uri .parse ('https://2.chat.example' ),
891
945
id: 1002 ,
892
946
user: eg.user (userId: 1001 ));
947
+ await testBinding.globalStore.add (account2, eg.initialSnapshot ());
893
948
final message2 = eg.streamMessage (id: 1000 , stream: stream, topic: topic);
894
949
final data2 =
895
950
messageFcmMessage (message2, account: account2, streamName: stream.name);
@@ -924,12 +979,14 @@ void main() {
924
979
final conversationKey = 'stream:${stream .streamId }:some topic' ;
925
980
926
981
final account1 = eg.account (id: 1001 , user: eg.user (userId: 1001 ), realmUrl: realmUrl);
982
+ await testBinding.globalStore.add (account1, eg.initialSnapshot ());
927
983
final message1 = eg.streamMessage (id: 1000 , stream: stream, topic: topic);
928
984
final data1 =
929
985
messageFcmMessage (message1, account: account1, streamName: stream.name);
930
986
final groupKey1 = '${account1 .realmUrl }|${account1 .userId }' ;
931
987
932
988
final account2 = eg.account (id: 1002 , user: eg.user (userId: 1002 ), realmUrl: realmUrl);
989
+ await testBinding.globalStore.add (account2, eg.initialSnapshot ());
933
990
final message2 = eg.streamMessage (id: 1000 , stream: stream, topic: topic);
934
991
final data2 =
935
992
messageFcmMessage (message2, account: account2, streamName: stream.name);
@@ -955,6 +1012,21 @@ void main() {
955
1012
receiveFcmMessage (async , removeFcmMessage ([message2], account: account2));
956
1013
check (testBinding.androidNotificationHost.activeNotifications).isEmpty ();
957
1014
})));
1015
+
1016
+ test ('removeNotificationsForAccount removes notifications' , () => runWithHttpClient (() => awaitFakeAsync ((async ) async {
1017
+ await init ();
1018
+ await testBinding.globalStore.add (eg.selfAccount, eg.initialSnapshot ());
1019
+ final message = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser]);
1020
+
1021
+ await checkNotifications (async , messageFcmMessage (message),
1022
+ expectedIsGroupConversation: false ,
1023
+ expectedTitle: eg.otherUser.fullName,
1024
+ expectedTagComponent: 'dm:${message .allRecipientIds .join ("," )}' );
1025
+
1026
+ check (testBinding.androidNotificationHost.activeNotifications).isNotEmpty ();
1027
+ await NotificationDisplayManager .removeNotificationsForAccount (eg.selfAccount.realmUrl, eg.selfAccount.userId);
1028
+ check (testBinding.androidNotificationHost.activeNotifications).isEmpty ();
1029
+ })));
958
1030
});
959
1031
960
1032
group ('NotificationDisplayManager open' , () {
0 commit comments