mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 01:03:24 +00:00
Format with line length 110 to match flake8 make black part of linting check Update travis spec for updated black requirements Add diff output for black on failure update changelog
108 lines
3.9 KiB
Python
108 lines
3.9 KiB
Python
import vcr
|
|
import pytest
|
|
from six.moves.urllib.request import urlopen
|
|
|
|
|
|
DEFAULT_URI = "http://httpbin.org/get?p1=q1&p2=q2" # base uri for testing
|
|
|
|
|
|
def _replace_httpbin(uri, httpbin, httpbin_secure):
|
|
return uri.replace("http://httpbin.org", httpbin.url).replace("https://httpbin.org", httpbin_secure.url)
|
|
|
|
|
|
@pytest.fixture
|
|
def cassette(tmpdir, httpbin, httpbin_secure):
|
|
"""
|
|
Helper fixture used to prepare the cassete
|
|
returns path to the recorded cassette
|
|
"""
|
|
default_uri = _replace_httpbin(DEFAULT_URI, httpbin, httpbin_secure)
|
|
|
|
cassette_path = str(tmpdir.join("test.yml"))
|
|
with vcr.use_cassette(cassette_path, record_mode="all"):
|
|
urlopen(default_uri)
|
|
return cassette_path
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"matcher, matching_uri, not_matching_uri",
|
|
[
|
|
("uri", "http://httpbin.org/get?p1=q1&p2=q2", "http://httpbin.org/get?p2=q2&p1=q1"),
|
|
("scheme", "http://google.com/post?a=b", "https://httpbin.org/get?p1=q1&p2=q2"),
|
|
("host", "https://httpbin.org/post?a=b", "http://google.com/get?p1=q1&p2=q2"),
|
|
("path", "https://google.com/get?a=b", "http://httpbin.org/post?p1=q1&p2=q2"),
|
|
("query", "https://google.com/get?p2=q2&p1=q1", "http://httpbin.org/get?p1=q1&a=b"),
|
|
],
|
|
)
|
|
def test_matchers(httpbin, httpbin_secure, cassette, matcher, matching_uri, not_matching_uri):
|
|
|
|
matching_uri = _replace_httpbin(matching_uri, httpbin, httpbin_secure)
|
|
not_matching_uri = _replace_httpbin(not_matching_uri, httpbin, httpbin_secure)
|
|
default_uri = _replace_httpbin(DEFAULT_URI, httpbin, httpbin_secure)
|
|
|
|
# play cassette with default uri
|
|
with vcr.use_cassette(cassette, match_on=[matcher]) as cass:
|
|
urlopen(default_uri)
|
|
assert cass.play_count == 1
|
|
|
|
# play cassette with matching on uri
|
|
with vcr.use_cassette(cassette, match_on=[matcher]) as cass:
|
|
urlopen(matching_uri)
|
|
assert cass.play_count == 1
|
|
|
|
# play cassette with not matching on uri, it should fail
|
|
with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException):
|
|
with vcr.use_cassette(cassette, match_on=[matcher]) as cass:
|
|
urlopen(not_matching_uri)
|
|
|
|
|
|
def test_method_matcher(cassette, httpbin, httpbin_secure):
|
|
default_uri = _replace_httpbin(DEFAULT_URI, httpbin, httpbin_secure)
|
|
|
|
# play cassette with matching on method
|
|
with vcr.use_cassette(cassette, match_on=["method"]) as cass:
|
|
urlopen("https://google.com/get?a=b")
|
|
assert cass.play_count == 1
|
|
|
|
# should fail if method does not match
|
|
with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException):
|
|
with vcr.use_cassette(cassette, match_on=["method"]) as cass:
|
|
# is a POST request
|
|
urlopen(default_uri, data=b"")
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"uri", [DEFAULT_URI, "http://httpbin.org/get?p2=q2&p1=q1", "http://httpbin.org/get?p2=q2&p1=q1"]
|
|
)
|
|
def test_default_matcher_matches(cassette, uri, httpbin, httpbin_secure):
|
|
|
|
uri = _replace_httpbin(uri, httpbin, httpbin_secure)
|
|
|
|
with vcr.use_cassette(cassette) as cass:
|
|
urlopen(uri)
|
|
assert cass.play_count == 1
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"uri",
|
|
[
|
|
"https://httpbin.org/get?p1=q1&p2=q2",
|
|
"http://google.com/get?p1=q1&p2=q2",
|
|
"http://httpbin.org/post?p1=q1&p2=q2",
|
|
"http://httpbin.org/get?p1=q1&a=b",
|
|
],
|
|
)
|
|
def test_default_matcher_does_not_match(cassette, uri, httpbin, httpbin_secure):
|
|
uri = _replace_httpbin(uri, httpbin, httpbin_secure)
|
|
with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException):
|
|
with vcr.use_cassette(cassette):
|
|
urlopen(uri)
|
|
|
|
|
|
def test_default_matcher_does_not_match_on_method(cassette, httpbin, httpbin_secure):
|
|
default_uri = _replace_httpbin(DEFAULT_URI, httpbin, httpbin_secure)
|
|
with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException):
|
|
with vcr.use_cassette(cassette):
|
|
# is a POST request
|
|
urlopen(default_uri, data=b"")
|