1+ using PubnubApi ;
2+ using PubnubChatApi ;
3+ using Channel = PubnubChatApi . Channel ;
4+
5+ namespace PubNubChatApi . Tests ;
6+
7+ public class ClientSideMuteTests
8+ {
9+ private Chat chat1 ;
10+ private User user1 ;
11+
12+ private Chat chat2 ;
13+ private User user2 ;
14+
15+ private Channel channel1 ;
16+ private Channel channel2 ;
17+
18+ [ SetUp ]
19+ public async Task Setup ( )
20+ {
21+ chat1 = TestUtils . AssertOperation ( await Chat . CreateInstance ( new PubnubChatConfig ( ) ,
22+ new PNConfiguration ( new UserId ( "client_side_mute_test_user_1" ) )
23+ {
24+ PublishKey = PubnubTestsParameters . PublishKey ,
25+ SubscribeKey = PubnubTestsParameters . SubscribeKey
26+ } ) ) ;
27+ chat2 = TestUtils . AssertOperation ( await Chat . CreateInstance ( new PubnubChatConfig ( ) ,
28+ new PNConfiguration ( new UserId ( "client_side_mute_test_user_2" ) )
29+ {
30+ PublishKey = PubnubTestsParameters . PublishKey ,
31+ SubscribeKey = PubnubTestsParameters . SubscribeKey
32+ } ) ) ;
33+ user1 = TestUtils . AssertOperation ( await chat1 . GetCurrentUser ( ) ) ;
34+ user2 = TestUtils . AssertOperation ( await chat2 . GetCurrentUser ( ) ) ;
35+ channel1 = TestUtils . AssertOperation ( await chat1 . CreatePublicConversation ( "mute_tests_channel" ) ) ;
36+ await Task . Delay ( 3000 ) ;
37+ channel2 = TestUtils . AssertOperation ( await chat2 . GetChannel ( "mute_tests_channel" ) ) ;
38+ }
39+
40+ [ TearDown ]
41+ public async Task CleanUp ( )
42+ {
43+ await channel1 . Leave ( ) ;
44+ await channel2 . Leave ( ) ;
45+ await user1 . DeleteUser ( false ) ;
46+ chat1 . Destroy ( ) ;
47+ await user2 . DeleteUser ( false ) ;
48+ chat2 . Destroy ( ) ;
49+ await channel1 . Delete ( false ) ;
50+ await channel2 . Delete ( false ) ;
51+ await Task . Delay ( 4000 ) ;
52+ }
53+
54+ [ Test ]
55+ public async Task TestMuteInMessages ( )
56+ {
57+ var messageReset = new ManualResetEvent ( false ) ;
58+ channel1 . OnMessageReceived += message =>
59+ {
60+ messageReset . Set ( ) ;
61+ } ;
62+ await channel1 . Join ( ) ;
63+
64+ await Task . Delay ( 3000 ) ;
65+
66+ await channel2 . SendText ( "This message should not be muted." ) ;
67+ var received = messageReset . WaitOne ( 10000 ) ;
68+ Assert . True ( received , "Didn't receive message from not-yet-muted user." ) ;
69+
70+ messageReset = new ManualResetEvent ( false ) ;
71+ await chat1 . MutedUsersManager . MuteUser ( user2 . Id ) ;
72+ await channel2 . SendText ( "This message should be muted." ) ;
73+ received = messageReset . WaitOne ( 10000 ) ;
74+ Assert . False ( received , "Received message from muted user." ) ;
75+
76+ messageReset = new ManualResetEvent ( false ) ;
77+ await chat1 . MutedUsersManager . UnMuteUser ( user2 . Id ) ;
78+ await channel2 . SendText ( "This message shouldn't be muted now." ) ;
79+ received = messageReset . WaitOne ( 10000 ) ;
80+ Assert . True ( received , "Didn't receive message from un-muted user." ) ;
81+ }
82+
83+ [ Test ]
84+ public async Task TestMuteInMessageHistory ( )
85+ {
86+ await channel2 . SendText ( "One" ) ;
87+ await channel2 . SendText ( "Two" ) ;
88+ await channel2 . SendText ( "Three" ) ;
89+
90+ await Task . Delay ( 6000 ) ;
91+
92+ var history = TestUtils . AssertOperation ( await channel1 . GetMessageHistory ( "99999999999999999" , "00000000000000000" , 3 ) ) ;
93+ Assert . True ( history . Count == 3 , "Didn't get message history for non-muted user" ) ;
94+
95+ await chat1 . MutedUsersManager . MuteUser ( user2 . Id ) ;
96+
97+ history = TestUtils . AssertOperation ( await channel1 . GetMessageHistory ( "99999999999999999" , "00000000000000000" , 3 ) ) ;
98+ Assert . True ( history . Count == 0 , "Got message history for muted user" ) ;
99+
100+ await chat1 . MutedUsersManager . UnMuteUser ( user2 . Id ) ;
101+
102+ history = TestUtils . AssertOperation ( await channel1 . GetMessageHistory ( "99999999999999999" , "00000000000000000" , 3 ) ) ;
103+ Assert . True ( history . Count == 3 , "Didn't get message history for un-muted user" ) ;
104+ }
105+
106+ [ Test ]
107+ public async Task TestMuteInEvents ( )
108+ {
109+ var eventReset = new ManualResetEvent ( false ) ;
110+ channel1 . OnCustomEvent += chatEvent =>
111+ {
112+ if ( chatEvent . Type != PubnubChatEventType . Custom )
113+ {
114+ return ;
115+ }
116+ eventReset . Set ( ) ;
117+ } ;
118+ channel1 . SetListeningForCustomEvents ( true ) ;
119+
120+ await Task . Delay ( 3000 ) ;
121+
122+ await chat2 . EmitEvent ( PubnubChatEventType . Custom , channel2 . Id , "{\" test\" :\" not-muted\" }" ) ;
123+ var received = eventReset . WaitOne ( 10000 ) ;
124+ Assert . True ( received , "Didn't receive event from not-yet-muted user." ) ;
125+
126+ eventReset = new ManualResetEvent ( false ) ;
127+ await chat1 . MutedUsersManager . MuteUser ( user2 . Id ) ;
128+ await chat2 . EmitEvent ( PubnubChatEventType . Custom , channel2 . Id , "{\" test\" :\" muted\" }" ) ;
129+ received = eventReset . WaitOne ( 10000 ) ;
130+ Assert . False ( received , "Received event from muted user." ) ;
131+
132+ eventReset = new ManualResetEvent ( false ) ;
133+ await chat1 . MutedUsersManager . UnMuteUser ( user2 . Id ) ;
134+ await chat2 . EmitEvent ( PubnubChatEventType . Custom , channel2 . Id , "{\" test\" :\" un-muted\" }" ) ;
135+ received = eventReset . WaitOne ( 10000 ) ;
136+ Assert . True ( received , "Didn't receive event from un-muted user." ) ;
137+ }
138+
139+ [ Test ]
140+ public async Task TestMuteInEventsHistory ( )
141+ {
142+ await chat2 . EmitEvent ( PubnubChatEventType . Custom , channel2 . Id , "{\" test\" :\" one\" }" ) ;
143+ await chat2 . EmitEvent ( PubnubChatEventType . Custom , channel2 . Id , "{\" test\" :\" two\" }" ) ;
144+ await chat2 . EmitEvent ( PubnubChatEventType . Custom , channel2 . Id , "{\" test\" :\" three\" }" ) ;
145+
146+ var history = TestUtils . AssertOperation ( await chat1 . GetEventsHistory ( channel1 . Id , "99999999999999999" , "00000000000000000" , 3 ) ) ;
147+ Assert . True ( history . Events . Count == 3 , "Didn't get events history for non-muted user" ) ;
148+
149+ await chat1 . MutedUsersManager . MuteUser ( user2 . Id ) ;
150+
151+ history = TestUtils . AssertOperation ( await chat1 . GetEventsHistory ( channel1 . Id , "99999999999999999" , "00000000000000000" , 3 ) ) ;
152+ Assert . True ( history . Events . Count == 0 , "Got events history for muted user" ) ;
153+
154+ await chat1 . MutedUsersManager . UnMuteUser ( user2 . Id ) ;
155+
156+ history = TestUtils . AssertOperation ( await chat1 . GetEventsHistory ( channel1 . Id , "99999999999999999" , "00000000000000000" , 3 ) ) ;
157+ Assert . True ( history . Events . Count == 3 , "Didn't get events history for un-muted user" ) ;
158+ }
159+
160+ [ Test ]
161+ public async Task TestMuteListSyncing ( )
162+ {
163+ var userId = Guid . NewGuid ( ) . ToString ( ) ;
164+ var chatWithSync = TestUtils . AssertOperation ( await Chat . CreateInstance ( new PubnubChatConfig ( syncMutedUsers : true ) ,
165+ new PNConfiguration ( new UserId ( userId ) )
166+ {
167+ PublishKey = PubnubTestsParameters . PublishKey ,
168+ SubscribeKey = PubnubTestsParameters . SubscribeKey
169+ } ) ) ;
170+ TestUtils . AssertOperation ( await chatWithSync . MutedUsersManager . MuteUser ( user1 . Id ) ) ;
171+
172+ chatWithSync . Destroy ( ) ;
173+
174+ await Task . Delay ( 3000 ) ;
175+ var chatWithSyncSecondInstance = TestUtils . AssertOperation ( await Chat . CreateInstance ( new PubnubChatConfig ( syncMutedUsers : true ) ,
176+ new PNConfiguration ( new UserId ( userId ) )
177+ {
178+ PublishKey = PubnubTestsParameters . PublishKey ,
179+ SubscribeKey = PubnubTestsParameters . SubscribeKey
180+ } ) ) ;
181+ await Task . Delay ( 5000 ) ;
182+ Assert . True ( chatWithSyncSecondInstance . MutedUsersManager . MutedUsers . Contains ( user1 . Id ) , "Second instance of chat didn't have synced mute list" ) ;
183+
184+ chatWithSyncSecondInstance . Destroy ( ) ;
185+ await chatWithSyncSecondInstance . DeleteUser ( userId ) ;
186+ }
187+ }
0 commit comments