예제 #1
0
파일: test_spy_log.py 프로젝트: mcous/decoy
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),
        ),
    ]
예제 #2
0
파일: test_spy_log.py 프로젝트: mcous/decoy
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),
        ),
    ]
예제 #3
0
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))
예제 #4
0
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))
예제 #5
0
                     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
             ),
         ),
예제 #6
0

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={})),
예제 #7
0
     ),
     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(