@@ -162,6 +162,72 @@ def test_diffsync_get_or_instantiate_retrieve_existing_object_wo_attrs(generic_d
162
162
assert obj .description is None
163
163
164
164
165
+ def test_diffsync_get_or_add_model_instance_create_non_existent_object (generic_diffsync ):
166
+ generic_diffsync .interface = Interface
167
+ intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
168
+ intf = generic_diffsync .interface (** intf_identifiers )
169
+
170
+ # Assert that the object does not currently exist.
171
+ with pytest .raises (ObjectNotFound ):
172
+ generic_diffsync .get (Interface , intf_identifiers )
173
+
174
+ obj , created = generic_diffsync .get_or_add_model_instance (intf )
175
+ assert created
176
+ assert obj is generic_diffsync .get (Interface , intf_identifiers )
177
+ assert obj is generic_diffsync .get ("interface" , intf_identifiers )
178
+
179
+
180
+ def test_diffsync_get_or_add_model_instance_retrieve_existing_object (generic_diffsync ):
181
+ intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
182
+ intf = Interface (** intf_identifiers )
183
+ generic_diffsync .add (intf )
184
+
185
+ obj , created = generic_diffsync .get_or_add_model_instance (intf )
186
+ assert obj is intf
187
+ assert not created
188
+
189
+
190
+ def test_diffsync_get_or_add_model_instance_retrieve_existing_object_w_attrs (generic_diffsync ):
191
+ intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
192
+ intf_attrs = {"interface_type" : "ethernet" }
193
+ intf_combine = {** intf_identifiers , ** intf_attrs }
194
+ intf = Interface (** intf_combine )
195
+ generic_diffsync .add (intf )
196
+
197
+ obj , created = generic_diffsync .get_or_add_model_instance (intf )
198
+ assert obj is intf
199
+ assert not created
200
+ assert obj .interface_type == "ethernet"
201
+ assert obj .description is None
202
+
203
+
204
+ def test_diffsync_get_or_add_model_instance_retrieve_create_non_existent_w_attrs (generic_diffsync ):
205
+ generic_diffsync .interface = Interface
206
+ intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
207
+ intf_attrs = {"interface_type" : "1000base-t" , "description" : "Testing" }
208
+ intf_combine = {** intf_identifiers , ** intf_attrs }
209
+ intf = Interface (** intf_combine )
210
+
211
+ obj , created = generic_diffsync .get_or_add_model_instance (intf )
212
+ assert created
213
+ assert obj .interface_type == "1000base-t"
214
+ assert obj .description == "Testing"
215
+ assert obj is generic_diffsync .get (Interface , intf_identifiers )
216
+ assert obj is generic_diffsync .get ("interface" , intf_identifiers )
217
+
218
+
219
+ def test_diffsync_get_or_add_model_instance_retrieve_existing_object_wo_attrs (generic_diffsync ):
220
+ intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
221
+ intf = Interface (** intf_identifiers )
222
+ generic_diffsync .add (intf )
223
+
224
+ obj , created = generic_diffsync .get_or_add_model_instance (intf )
225
+ assert obj is intf
226
+ assert not created
227
+ assert obj .interface_type == "ethernet"
228
+ assert obj .description is None
229
+
230
+
165
231
def test_diffsync_update_or_instantiate_retrieve_existing_object_w_updated_attrs (generic_diffsync ):
166
232
intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
167
233
intf_attrs = {"interface_type" : "1000base-t" , "description" : "Testing" }
@@ -194,6 +260,42 @@ def test_diffsync_update_or_instantiate_create_object_w_attrs(generic_diffsync):
194
260
assert obj .description == "Testing"
195
261
196
262
263
+ def test_diffsync_update_or_add_model_instance_retrieve_existing_object_w_updated_attrs (generic_diffsync ):
264
+ intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
265
+ intf_attrs = {"interface_type" : "1000base-t" , "description" : "Testing" }
266
+ intf_combine = {** intf_identifiers , ** intf_attrs }
267
+ intf = Interface (** intf_combine )
268
+ generic_diffsync .add (intf )
269
+
270
+ obj , created = generic_diffsync .update_or_add_model_instance (intf )
271
+ assert obj is intf
272
+ assert not created
273
+ assert obj .interface_type == "1000base-t"
274
+ assert obj .description == "Testing"
275
+
276
+
277
+ def test_diffsync_update_or_add_model_instance_create_object (generic_diffsync ):
278
+ intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
279
+ intf = Interface (** intf_identifiers )
280
+
281
+ obj , created = generic_diffsync .update_or_add_model_instance (intf )
282
+ assert created
283
+ assert obj .interface_type == "ethernet"
284
+ assert obj .description is None
285
+
286
+
287
+ def test_diffsync_update_or_add_model_instance_create_object_w_attrs (generic_diffsync ):
288
+ intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
289
+ intf_attrs = {"interface_type" : "1000base-t" , "description" : "Testing" }
290
+ intf_combine = {** intf_identifiers , ** intf_attrs }
291
+ intf = Interface (** intf_combine )
292
+
293
+ obj , created = generic_diffsync .update_or_add_model_instance (intf )
294
+ assert created
295
+ assert obj .interface_type == "1000base-t"
296
+ assert obj .description == "Testing"
297
+
298
+
197
299
def test_diffsync_get_with_generic_model (generic_diffsync , generic_diffsync_model ):
198
300
generic_diffsync .add (generic_diffsync_model )
199
301
# The generic_diffsync_model has an empty identifier/unique-id
0 commit comments