22using System ;
33using System . Collections ;
44using System . Collections . Generic ;
5+ using System . Diagnostics ;
56using System . Linq ;
67using System . Threading . Tasks ;
78using NUnit . Framework ;
9+ using StreamChat . Core . InternalDTO . Events ;
810using StreamChat . Core . QueryBuilders . Filters ;
911using StreamChat . Core . QueryBuilders . Filters . Users ;
1012using StreamChat . Core . Requests ;
@@ -116,6 +118,61 @@ private async Task When_query_users_with_id_autocomplete_expect_valid_results_As
116118 Assert . IsTrue ( usersArr . All ( u => u . Name . ToLower ( ) . StartsWith ( "ann" ) ) ) ;
117119 Assert . IsNull ( usersArr . FirstOrDefault ( u => u . Name . StartsWith ( userMike . Name ) ) ) ;
118120 }
121+
122+ [ UnityTest ]
123+ public IEnumerator When_upsert_user_expect_no_error ( )
124+ => ConnectAndExecute ( When_upsert_user_expect_no_error_Async ) ;
125+
126+ private async Task When_upsert_user_expect_no_error_Async ( )
127+ {
128+ var eventReceived = false ;
129+ Client . InternalLowLevelClient . InternalUserUpdated += dto => eventReceived = true ;
130+
131+ var createUserRequest = new StreamUserUpsertRequest
132+ {
133+ Id = Guid . NewGuid ( ) . ToString ( ) ,
134+ Name = "mike"
135+ } ;
136+
137+ var users = await Client . UpsertUsers ( new [ ] { createUserRequest } ) ;
138+ Assert . NotNull ( users ) ;
139+ Assert . AreEqual ( users . Count ( ) , 1 ) ;
140+
141+ // Query user to watch him and receive events
142+ var queriedUsers = await TryAsync ( async ( ) =>
143+ {
144+ return await Client . QueryUsersAsync ( new List < IFieldFilterRule >
145+ {
146+ UserFilter . Id . In ( users . Select ( u => u . Id ) )
147+ } ) ;
148+ } , result => result . Any ( ) ) ;
149+
150+ Assert . NotNull ( queriedUsers ) ;
151+ Assert . AreEqual ( queriedUsers . Count ( ) , 1 ) ;
152+
153+ // Update users and wait for event
154+ var updateUserRequest = new StreamUserUpsertRequest
155+ {
156+ Id = createUserRequest . Id ,
157+ Name = "Steven"
158+ } ;
159+
160+ var users2 = await Client . UpsertUsers ( new [ ] { updateUserRequest } ) ;
161+ Assert . NotNull ( users2 ) ;
162+ Assert . AreEqual ( users2 . Count ( ) , 1 ) ;
163+
164+ var sw = new Stopwatch ( ) ;
165+ sw . Start ( ) ;
166+ while ( sw . Elapsed . TotalSeconds < 30 && ! eventReceived )
167+ {
168+ await Task . Delay ( 100 ) ;
169+ }
170+
171+ // StreamTodo: debug why event is not always received. By querying the newly created user with the watch = true we should start receiving events
172+ // But the user.updated event is not always received
173+
174+ //Assert.IsTrue(eventReceived);
175+ }
119176 }
120177}
121178#endif
0 commit comments