def test_consume_verify_rehearsals_ignore_extra_args() -> None: """It should be able to pop a slice off the stack, retaining order.""" subject = SpyLog() call_1 = SpyEvent(spy_id=1, spy_name="spy_1", payload=SpyCall(args=(), kwargs={})) call_2 = SpyEvent(spy_id=2, spy_name="spy_2", payload=SpyCall(args=(), kwargs={})) subject.push(call_1) subject.push(call_2) result = subject.consume_verify_rehearsals(count=2, ignore_extra_args=True) assert result == [ VerifyRehearsal( spy_id=1, spy_name="spy_1", payload=SpyCall(args=(), kwargs={}, ignore_extra_args=True), ), VerifyRehearsal( spy_id=2, spy_name="spy_2", payload=SpyCall(args=(), kwargs={}, ignore_extra_args=True), ), ]
def test_consume_verify_rehearsals_ignores_prop_gets() -> None: """It should be able to pop a slice off the stack, retaining order.""" subject = SpyLog() call_1 = SpyEvent(spy_id=101, spy_name="spy_1", payload=SpyCall(args=(1, ), kwargs={})) call_2 = SpyEvent( spy_id=101, spy_name="spy_1", payload=SpyPropAccess(prop_name="child", access_type=PropAccessType.GET), ) call_3 = SpyEvent( spy_id=102, spy_name="spy_1.child", payload=SpyCall(args=(2, ), kwargs={}), ) call_4 = SpyEvent( spy_id=102, spy_name="spy_1.child", payload=SpyPropAccess(prop_name="fizz", access_type=PropAccessType.DELETE), ) subject.push(call_1) subject.push(call_2) subject.push(call_3) subject.push(call_4) result = subject.consume_verify_rehearsals(count=3, ignore_extra_args=False) assert result == [ VerifyRehearsal( spy_id=101, spy_name="spy_1", payload=SpyCall(args=(1, ), kwargs={}), ), VerifyRehearsal( spy_id=102, spy_name="spy_1.child", payload=SpyCall(args=(2, ), kwargs={}), ), VerifyRehearsal( spy_id=102, spy_name="spy_1.child", payload=SpyPropAccess(prop_name="fizz", access_type=PropAccessType.DELETE), ), ]
def test_verify( decoy: Decoy, spy_log: SpyLog, verifier: Verifier, subject: DecoyCore, ) -> None: """It should be able to verify a call.""" spy_id = 42 rehearsal = VerifyRehearsal(spy_id=spy_id, spy_name="my_spy", payload=SpyCall(args=(), kwargs={})) call = SpyEvent(spy_id=spy_id, spy_name="my_spy", payload=SpyCall(args=(), kwargs={})) decoy.when( spy_log.consume_verify_rehearsals( count=1, ignore_extra_args=False)).then_return([rehearsal]) decoy.when(spy_log.get_calls_to_verify([spy_id])).then_return([call]) subject.verify("__rehearsal__", times=None, ignore_extra_args=False) decoy.verify( verifier.verify(rehearsals=[rehearsal], calls=[call], times=None))
def test_verify_multiple_calls( decoy: Decoy, spy_log: SpyLog, verifier: Verifier, subject: DecoyCore, ) -> None: """It should be able to verify a call.""" spy_id_1 = 42 spy_id_2 = 9001 rehearsals = [ VerifyRehearsal(spy_id=spy_id_1, spy_name="spy_1", payload=SpyCall(args=(), kwargs={})), VerifyRehearsal(spy_id=spy_id_2, spy_name="spy_2", payload=SpyCall(args=(), kwargs={})), ] calls = [ SpyEvent(spy_id=spy_id_1, spy_name="spy_1", payload=SpyCall(args=(), kwargs={})) ] decoy.when( spy_log.consume_verify_rehearsals( count=2, ignore_extra_args=False)).then_return(rehearsals) decoy.when(spy_log.get_calls_to_verify([spy_id_1, spy_id_2])).then_return(calls) subject.verify( "__rehearsal_1__", "__rehearsal_2__", times=None, ignore_extra_args=False, ) decoy.verify( verifier.verify(rehearsals=rehearsals, calls=calls, times=None))
spy_id=1, spy_name="spy", payload=SpyCall(args=(), kwargs={}) ) ], calls=[ SpyEvent( spy_id=1, spy_name="spy", payload=SpyCall(args=(1,), kwargs={}) ) ], ) ], ), # it should not warn if a spy's verify rehearsal doesn't match WarningCheckerSpec( all_calls=[ VerifyRehearsal( spy_id=1, spy_name="spy", payload=SpyCall(args=(), kwargs={}) ), SpyEvent(spy_id=1, spy_name="spy", payload=SpyCall(args=(1,), kwargs={})), ], expected_warnings=[], ), # it should not warn due to spy prop access WarningCheckerSpec( all_calls=[ WhenRehearsal( spy_id=1, spy_name="spy", payload=SpyPropAccess( prop_name="prop_name", access_type=PropAccessType.GET ), ),
class VerifyErrorSpec(NamedTuple): """Spec data for VerifyError tests.""" rehearsals: List[VerifyRehearsal] calls: List[SpyEvent] times: Optional[int] expected_message: str verify_error_specs = [ VerifyErrorSpec( rehearsals=[ VerifyRehearsal(spy_id=42, spy_name="my_spy", payload=SpyCall(args=(), kwargs={})), ], calls=[], times=None, expected_message=os.linesep.join([ "Expected at least 1 call:", "1.\tmy_spy()", "Found 0 calls.", ]), ), VerifyErrorSpec( rehearsals=[ VerifyRehearsal(spy_id=42, spy_name="my_spy", payload=SpyCall(args=(), kwargs={})),
), expected_result=True, ), MatchEventSpec( event=SpyEvent( spy_id=42, spy_name="my_spy", payload=SpyCall(args=(1, 2), kwargs={ "foo": "bar", "baz": "qux" }), ), rehearsal=VerifyRehearsal( spy_id=42, spy_name="my_spy", payload=SpyCall(args=(1, 2), kwargs={ "foo": "bar", "baz": "qux" }), ), expected_result=True, ), MatchEventSpec( event=SpyEvent( spy_id=42, spy_name="my_spy", payload=SpyCall(args=(1, 2), kwargs={ "foo": "bar", "baz": "qux" }), ), rehearsal=WhenRehearsal(