@@ -270,6 +270,106 @@ def test_find_with_none(self):
270270 for item in items :
271271 self .assertTrue (len (item ["users" ]) > 0 )
272272
273+
274+ class TestMultiEntityFieldUpdate (unittest .TestCase ):
275+ """
276+ Ensures multi entity field update modes work.
277+ """
278+
279+ def setUp (self ):
280+ """
281+ Creates test data.
282+ """
283+
284+ self ._mockgun = Mockgun ("https://test.shotgunstudio.com" , login = "user" , password = "1234" )
285+
286+ # Create two versions to assign to the shot.
287+ self ._version1 = self ._mockgun .create ("Version" , {"code" : "version1" })
288+ self ._version2 = self ._mockgun .create ("Version" , {"code" : "version2" })
289+ self ._version3 = self ._mockgun .create ("Version" , {"code" : "version3" })
290+
291+ # remove 'code' field for later comparisons
292+ del self ._version1 ["code" ]
293+ del self ._version2 ["code" ]
294+ del self ._version3 ["code" ]
295+
296+ # Create playlists
297+ self ._add_playlist = self ._mockgun .create (
298+ "Playlist" ,
299+ {"code" : "playlist1" , "versions" : [self ._version1 , self ._version2 ]}
300+ )
301+ self ._remove_playlist = self ._mockgun .create (
302+ "Playlist" ,
303+ {"code" : "playlist1" , "versions" : [self ._version1 , self ._version2 , self ._version3 ]}
304+ )
305+ self ._set_playlist = self ._mockgun .create (
306+ "Playlist" ,
307+ {"code" : "playlist1" , "versions" : [self ._version1 , self ._version2 ]}
308+ )
309+
310+ def test_update_add (self ):
311+ """
312+ Ensures that "add" multi_entity_update_mode works.
313+ """
314+ self ._mockgun .update (
315+ "Playlist" , self ._add_playlist ["id" ], {"versions" : [self ._version3 ]},
316+ multi_entity_update_modes = {"versions" : "add" }
317+ )
318+
319+ playlist = self ._mockgun .find_one (
320+ "Playlist" , [["id" , "is" , self ._add_playlist ["id" ]]], ["versions" ]
321+ )
322+ self .assertEqual (
323+ playlist ["versions" ], [self ._version1 , self ._version2 , self ._version3 ]
324+ )
325+
326+ def test_update_remove (self ):
327+ """
328+ Ensures that "remove" multi_entity_update_mode works.
329+ """
330+ self ._mockgun .update (
331+ "Playlist" , self ._remove_playlist ["id" ], {"versions" : [self ._version2 ]},
332+ multi_entity_update_modes = {"versions" : "remove" }
333+ )
334+
335+ playlist = self ._mockgun .find_one (
336+ "Playlist" , [["id" , "is" , self ._remove_playlist ["id" ]]], ["versions" ]
337+ )
338+ self .assertEqual (playlist ["versions" ], [self ._version1 , self ._version3 ])
339+
340+ def test_update_set (self ):
341+ """
342+ Ensures that "set" multi_entity_update_mode works.
343+ """
344+ self ._mockgun .update (
345+ "Playlist" ,
346+ self ._set_playlist ["id" ],
347+ {"versions" : [self ._version2 , self ._version3 ]},
348+ multi_entity_update_modes = {"versions" : "set" }
349+ )
350+
351+ playlist = self ._mockgun .find_one (
352+ "Playlist" , [["id" , "is" , self ._set_playlist ["id" ]]], ["versions" ]
353+ )
354+ self .assertEqual (playlist ["versions" ], [self ._version2 , self ._version3 ])
355+
356+ def test_batch_update (self ):
357+ self ._mockgun .batch (
358+ [
359+ {
360+ "request_type" : "update" ,
361+ "entity_type" : "Playlist" ,
362+ "entity_id" : self ._set_playlist ["id" ],
363+ "data" : {"versions" : [self ._version1 , self ._version2 ]},
364+ "multi_entity_update_modes" : {"versions" : "set" }
365+ }
366+ ]
367+ )
368+ playlist = self ._mockgun .find_one (
369+ "Playlist" , [["id" , "is" , self ._set_playlist ["id" ]]], ["versions" ]
370+ )
371+ self .assertEqual (playlist ["versions" ], [self ._version1 , self ._version2 ])
372+
273373
274374class TestFilterOperator (unittest .TestCase ):
275375 """
0 commit comments