@@ -416,19 +416,32 @@ async def test_run(self, event_loop):
416416 change = AddRelationChange (1 , [], params = {"endpoint1" : "endpoint1" ,
417417 "endpoint2" : "endpoint2" })
418418
419+ rel1 = mock .Mock (name = "rel1" , ** {"matches.return_value" : False })
420+ rel2 = mock .Mock (name = "rel2" , ** {"matches.return_value" : True })
421+
419422 model = mock .Mock ()
420- model .add_relation = base .AsyncMock (return_value = "relation1" )
423+ model .add_relation = base .AsyncMock (return_value = rel2 )
421424
422425 context = mock .Mock ()
423426 context .resolveRelation = mock .Mock (side_effect = ['endpoint_1' , 'endpoint_2' ])
424427 context .model = model
428+ model .relations = [rel1 ]
425429
426430 result = await change .run (context )
427- assert result == "relation1"
431+ assert result is rel2
428432
429433 model .add_relation .assert_called_once ()
430434 model .add_relation .assert_called_with ("endpoint_1" , "endpoint_2" )
431435
436+ # confirm that it's idempotent
437+ context .resolveRelation .side_effect = ['endpoint_1' , 'endpoint_2' ]
438+ model .add_relation .reset_mock ()
439+ model .add_relation .return_value = None
440+ model .relations = [rel1 , rel2 ]
441+ result = await change .run (context )
442+ assert result is rel2
443+ assert not model .add_relation .called
444+
432445
433446class TestAddUnitChange (unittest .TestCase ):
434447
0 commit comments