@@ -104,6 +104,58 @@ def test_fields_parameter(self):
104
104
self .assertEqual (0 , ret ["stats" ]["created" ])
105
105
self .assertEqual (0 , ret ["stats" ]["deleted" ])
106
106
107
+ def test_skip_deletes (self ):
108
+ c1 = Company .objects .create (name = "My Company LLC" )
109
+
110
+ e1 = Employee .objects .create (name = "Scott" , age = 40 , company = c1 )
111
+ e2 = Employee .objects .create (name = "Isaac" , age = 9 , company = c1 )
112
+
113
+ # update Scott - this makes Isaac is the "stale object" that would be deleted if skip_deletes were False
114
+ new_objs = [
115
+ Employee (name = "Scott" , age = 41 , company = c1 ),
116
+ ]
117
+
118
+ # but Isaac should remain when the skip_deletes flag is True
119
+ ret = bulk_sync (new_models = new_objs , filters = None , key_fields = ("name" ,), skip_deletes = True )
120
+
121
+ self .assertEqual (2 , Employee .objects .count ())
122
+ self .assertEqual (["Scott" , "Isaac" ], [x .name for x in Employee .objects .all ().order_by ('id' )])
123
+
124
+ def test_skip_creates (self ):
125
+ c1 = Company .objects .create (name = "My Company LLC" )
126
+
127
+ e1 = Employee .objects .create (name = "Scott" , age = 40 , company = c1 )
128
+ e2 = Employee .objects .create (name = "Isaac" , age = 9 , company = c1 )
129
+
130
+ # create a new employee that will be ignored
131
+ new_objs = [
132
+ Employee (name = "John" , age = 52 , company = c1 )
133
+ ]
134
+
135
+ ret = bulk_sync (new_models = new_objs , filters = None , key_fields = ("name" ,), skip_creates = True , skip_deletes = True )
136
+
137
+ self .assertEqual (2 , Employee .objects .count ())
138
+ self .assertEqual (["Scott" , "Isaac" ], [x .name for x in Employee .objects .all ().order_by ('id' )])
139
+
140
+ def test_skip_updates (self ):
141
+ c1 = Company .objects .create (name = "My Company LLC" )
142
+
143
+ e1 = Employee .objects .create (name = "Scott" , age = 40 , company = c1 )
144
+ e2 = Employee .objects .create (name = "Isaac" , age = 9 , company = c1 )
145
+
146
+ # create a new employee that will be ignored
147
+ new_objs = [
148
+ Employee (name = "Scott" , age = 100 , company = c1 )
149
+ ]
150
+
151
+ ret = bulk_sync (new_models = new_objs , filters = None , key_fields = ("name" ,), skip_updates = True )
152
+
153
+ # the age should not have been updated
154
+ new_e1 = Employee .objects .get (id = e1 .id )
155
+ self .assertEqual (40 , new_e1 .age )
156
+
157
+
158
+
107
159
class BulkCompareTests (TestCase ):
108
160
""" Test `bulk_compare` method """
109
161
0 commit comments