def test_interactions_cache(path):
    Cassette._cache = {}
    path.write('\n'.join([
        'interactions:',
        '- request:',
        '    body: request body',
        '    endpoint: foo',
        '    headers: headers',
        '    serviceName: bar',
        '  response:',
        '    body: response body',
        '    headers: headers',
        '    code: 0',
        'version: 1',
    ]))

    assert len(Cassette._cache) == 0
    with Cassette(str(path)) as cass:
        assert len(Cassette._cache) == 1

    mock_serializer = Mock()
    with Cassette(str(path), serializer=mock_serializer) as cass:
        assert not mock_serializer.load.called
        assert len(Cassette._cache) == 1
        assert len(cass._available) == 1
def test_record_into_nonexistent_directory(tmpdir):
    path = tmpdir.join('somedir/data.yaml')
    request = requests.example()
    response = responses.example()

    with Cassette(str(path)) as cass:
        cass.record(request, response)

    with Cassette(str(path)) as cass:
        assert cass.can_replay(request)
        assert cass.replay(request) == response
def test_record_mode_none(path):
    req = requests.example()
    res = responses.example()

    with Cassette(str(path), record_mode=RecordMode.NONE) as cass:
        with pytest.raises(AssertionError):
            cass.record(req, res)

    # save and try again
    with Cassette(str(path)) as cass:
        cass.record(req, res)

    with Cassette(str(path), record_mode=RecordMode.NONE) as cass:
        assert res == cass.replay(req)
def test_record_same(path):
    request = requests.example()
    response1 = responses.example()
    response2 = responses.example()

    with Cassette(str(path)) as cass:
        cass.record(request, response1)
        cass.record(request, response2)

    with Cassette(str(path)) as cass:

        assert cass.replay(request) == response1
        assert cass.replay(request) == response2
        assert cass.play_count == 2
def test_does_not_forget_on_new_interactions(path):
    req1 = requests.example()
    res1 = responses.example()

    with Cassette(str(path)) as cass:
        cass.record(req1, res1)

    req2 = requests.example()
    res2 = responses.example()

    with Cassette(str(path), record_mode=RecordMode.NEW_EPISODES) as cass:
        cass.record(req2, res2)

    with Cassette(str(path)) as cass:
        assert res1 == cass.replay(req1)
        assert res2 == cass.replay(req2)
def test_replay_unknown(path):
    request = requests.example()

    with Cassette(str(path)) as cass:
        cass.record(requests.example(), responses.example())

        assert not cass.can_replay(request)
        with pytest.raises(RequestNotFoundError):
            cass.replay(request)
def test_save_and_replay(path):
    request = requests.example()
    response = responses.example()

    with Cassette(str(path)) as cass:
        cass.record(request, response)

        # Can't replay until saved.
        assert not cass.can_replay(request)

    with Cassette(str(path)) as cass:
        assert cass.can_replay(request)
        assert cass.replay(request) == response
        assert cass.play_count == 1

        with pytest.raises(RequestNotFoundError):
            # a single request can only be played once in a given session.
            cass.replay(request)
def test_record_mode_all(path):
    req = requests.example()
    res = responses.example()
    res2 = responses.example()

    with Cassette(str(path)) as cass:
        cass.record(req, res)

    with Cassette(str(path), record_mode=RecordMode.ALL) as cass:
        assert not cass.can_replay(req)
        with pytest.raises(AssertionError):
            cass.replay(req)

    with Cassette(str(path), record_mode=RecordMode.ALL) as cass:
        cass.record(req, res2)

    with Cassette(str(path)) as cass:
        assert res2 == cass.replay(req)
def test_unsupported_version(path):
    path.write('\n'.join([
        'interactions:',
        '- request:',
        '    body: request body',
        '    endpoint: foo',
        '    headers: headers',
        '    service: bar',
        '  response:',
        '    body: response body',
        '    headers: headers',
        '    status: 0',
        'version: 2',
    ]))

    with pytest.raises(UnsupportedVersionError):
        Cassette(str(path))
def test_empty_file(path):
    path.write('')
    cass = Cassette(str(path))
    assert len(cass.data) == 0
def test_invalid_matcher(path):
    with pytest.raises(KeyError):
        Cassette(str(path), matchers=('serviceName', 'not a matcher'))
def test_record_mode_invalid(path):
    with pytest.raises(VCRError):
        Cassette(str(path), record_mode='not_valid')
def test_save_without_recording(path):
    cass = Cassette(str(path))
    cass.save()

    assert not path.check()
def test_path_does_not_exist(path):
    cass = Cassette(str(path))
    assert len(cass.data) == 0
예제 #15
0
def test_save_without_recording(path):
    cass = Cassette(str(path))
    cass.save()

    assert not path.check()