@@ -162,6 +162,72 @@ def test_diffsync_get_or_instantiate_retrieve_existing_object_wo_attrs(generic_d
162162 assert obj .description is None
163163
164164
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+
165231def test_diffsync_update_or_instantiate_retrieve_existing_object_w_updated_attrs (generic_diffsync ):
166232 intf_identifiers = {"device_name" : "device1" , "name" : "eth1" }
167233 intf_attrs = {"interface_type" : "1000base-t" , "description" : "Testing" }
@@ -194,6 +260,42 @@ def test_diffsync_update_or_instantiate_create_object_w_attrs(generic_diffsync):
194260 assert obj .description == "Testing"
195261
196262
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+
197299def test_diffsync_get_with_generic_model (generic_diffsync , generic_diffsync_model ):
198300 generic_diffsync .add (generic_diffsync_model )
199301 # The generic_diffsync_model has an empty identifier/unique-id
0 commit comments