@@ -164,6 +164,96 @@ public async Task TestUpdateToTargets()
164164 Assert . AreEqual ( 2 , updatedAct . To . ToList ( ) . FindAll ( t => newOnes . Contains ( t ) ) . Count ) ;
165165 }
166166
167+ [ Test ]
168+ public async Task TestBatchUpdateToTargets ( )
169+ {
170+ var fidTime = new ForeignIdTime ( Guid . NewGuid ( ) . ToString ( ) , DateTime . UtcNow ) ;
171+
172+ var targets = new List < string > ( )
173+ {
174+ "flat:" + Guid . NewGuid ( ) . ToString ( ) ,
175+ "user:" + Guid . NewGuid ( ) . ToString ( ) ,
176+ } ;
177+
178+ var act = new Activity ( "upd" , "test" , "1" )
179+ {
180+ ForeignId = fidTime . ForeignId ,
181+ Time = fidTime . Time ,
182+ To = targets ,
183+ } ;
184+
185+ var insertedAct = await this . UserFeed . AddActivityAsync ( act ) ;
186+ Assert . AreEqual ( 2 , insertedAct . To . Count ) ;
187+
188+ // add 1
189+ var add = "user:" + Guid . NewGuid ( ) . ToString ( ) ;
190+ var updateReqs = new List < UpdateToTargetsRequest >
191+ {
192+ new UpdateToTargetsRequest
193+ {
194+ Id = insertedAct . Id ,
195+ Adds = new List < string > { add } ,
196+ }
197+ } ;
198+ var updateResp = await this . UserFeed . BatchUpdateActivityToTargetsAsync ( updateReqs ) ;
199+ Assert . AreEqual ( insertedAct . Id , updateResp . Activity . Id ) ;
200+ Assert . AreEqual ( 1 , updateResp . Added . Count ) ;
201+ Assert . AreEqual ( add , updateResp . Added [ 0 ] ) ;
202+ Assert . AreEqual ( 3 , updateResp . Activity . To . Count ) ;
203+ Assert . IsNotNull ( updateResp . Activity . To . ToList ( ) . Find ( t => t == add ) ) ;
204+
205+ var updatedAct = ( await this . UserFeed . GetActivitiesAsync ( 0 , 1 , FeedFilter . Where ( ) . IdLessThanEqual ( insertedAct . Id ) ) ) . Results . FirstOrDefault ( ) ;
206+ Assert . NotNull ( updatedAct ) ;
207+ Assert . AreEqual ( 3 , updatedAct . To . Count ) ;
208+ Assert . IsNotNull ( updatedAct . To . ToList ( ) . Find ( t => t == add ) ) ;
209+
210+ // remove 1
211+ var remove = targets [ 0 ] ;
212+ updateReqs = new List < UpdateToTargetsRequest >
213+ {
214+ new UpdateToTargetsRequest
215+ {
216+ Id = insertedAct . Id ,
217+ RemovedTargets = new List < string > { remove } ,
218+ }
219+ } ;
220+ updateResp = await this . UserFeed . BatchUpdateActivityToTargetsAsync ( updateReqs ) ;
221+ Assert . AreEqual ( insertedAct . Id , updateResp . Activity . Id ) ;
222+ Assert . AreEqual ( 1 , updateResp . Removed . Count ) ;
223+ Assert . AreEqual ( remove , updateResp . Removed [ 0 ] ) ;
224+ Assert . AreEqual ( 2 , updateResp . Activity . To . Count ) ;
225+ Assert . IsNull ( updateResp . Activity . To . ToList ( ) . Find ( t => t == remove ) ) ;
226+
227+ updatedAct = ( await this . UserFeed . GetActivitiesAsync ( 0 , 1 , FeedFilter . Where ( ) . IdLessThanEqual ( insertedAct . Id ) ) ) . Results . FirstOrDefault ( ) ;
228+ Assert . NotNull ( updatedAct ) ;
229+ Assert . AreEqual ( 2 , updatedAct . To . Count ) ;
230+ Assert . IsNull ( updatedAct . To . ToList ( ) . Find ( t => t == remove ) ) ;
231+
232+ // new ones
233+ var newOnes = new List < string > ( )
234+ {
235+ "flat:" + Guid . NewGuid ( ) . ToString ( ) ,
236+ "user:" + Guid . NewGuid ( ) . ToString ( ) ,
237+ } ;
238+ updateReqs = new List < UpdateToTargetsRequest >
239+ {
240+ new UpdateToTargetsRequest
241+ {
242+ Id = insertedAct . Id ,
243+ NewTargets = newOnes ,
244+ }
245+ } ;
246+ updateResp = await this . UserFeed . BatchUpdateActivityToTargetsAsync ( updateReqs ) ;
247+ Assert . AreEqual ( insertedAct . Id , updateResp . Activity . Id ) ;
248+ Assert . AreEqual ( 2 , updateResp . Activity . To . Count ) ;
249+ Assert . AreEqual ( 2 , updateResp . Added . Count ) ;
250+ Assert . AreEqual ( 2 , updateResp . Added . ToList ( ) . FindAll ( t => newOnes . Contains ( t ) ) . Count ) ;
251+ updatedAct = ( await this . UserFeed . GetActivitiesAsync ( 0 , 1 , FeedFilter . Where ( ) . IdLessThanEqual ( insertedAct . Id ) ) ) . Results . FirstOrDefault ( ) ;
252+ Assert . NotNull ( updatedAct ) ;
253+ Assert . AreEqual ( 2 , updatedAct . To . Count ) ;
254+ Assert . AreEqual ( 2 , updatedAct . To . ToList ( ) . FindAll ( t => newOnes . Contains ( t ) ) . Count ) ;
255+ }
256+
167257 [ Test ]
168258 public async Task TestActivityPartialUpdateByForeignIDTime ( )
169259 {
0 commit comments