From 010fa268d130f4d95a8b93bc728ff734749c4c5c Mon Sep 17 00:00:00 2001 From: Daniel Silva Date: Wed, 4 Jan 2023 20:02:43 +0000 Subject: [PATCH] test: add tests to drop_unused_requests option --- tests/integration/test_config.py | 18 ++++++++++++++++++ tests/unit/test_cassettes.py | 23 +++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/tests/integration/test_config.py b/tests/integration/test_config.py index 013f849..361e7a3 100644 --- a/tests/integration/test_config.py +++ b/tests/integration/test_config.py @@ -5,6 +5,7 @@ from urllib.request import urlopen import pytest import vcr +from vcr.cassette import Cassette def test_set_serializer_default_config(tmpdir, httpbin): @@ -80,3 +81,20 @@ def test_dont_record_on_exception(tmpdir): assert b"Not in content" in urlopen("http://httpbin.org/get").read() assert not os.path.exists(str(tmpdir.join("dontsave2.yml"))) + +def test_set_drop_unused_requests(tmpdir, httpbin): + my_vcr = vcr.VCR(drop_unused_requests=True) + file = str(tmpdir.join("test.yaml")) + + with my_vcr.use_cassette(file): + urlopen(httpbin.url) + urlopen(httpbin.url + "/get") + + cassette = Cassette.load(path=file) + assert len(cassette) == 2 + + with my_vcr.use_cassette(file): + urlopen(httpbin.url) + + cassette = Cassette.load(path=file) + assert len(cassette) == 1 diff --git a/tests/unit/test_cassettes.py b/tests/unit/test_cassettes.py index 41e3df5..0acd116 100644 --- a/tests/unit/test_cassettes.py +++ b/tests/unit/test_cassettes.py @@ -11,6 +11,7 @@ import yaml from vcr.cassette import Cassette from vcr.errors import UnhandledHTTPRequestError from vcr.patch import force_reset +from vcr.request import Request from vcr.stubs import VCRHTTPSConnection @@ -394,3 +395,25 @@ def test_find_requests_with_most_matches_many_similar_requests(mock_get_matchers (1, ["method", "path"], [("query", "failed : query")]), (3, ["method", "path"], [("query", "failed : query")]), ] + + +def test_used_interactions(tmpdir): + interactions = [ + {"request": {"body": "", "uri": "foo1", "method": "GET", "headers": {}}, "response": "bar1"}, + {"request": {"body": "", "uri": "foo2", "method": "GET", "headers": {}}, "response": "bar2"}, + {"request": {"body": "", "uri": "foo3", "method": "GET", "headers": {}}, "response": "bar3"} + ] + file = tmpdir.join("test_cassette.yml") + file.write(yaml.dump({"interactions": [interactions[0], interactions[1]]})) + + cassette = Cassette.load(path=str(file)) + request = Request._from_dict(interactions[1]["request"]) + cassette.play_response(request) + assert len(cassette._played_interactions) < len(cassette._old_interactions) + + request = Request._from_dict(interactions[2]["request"]) + cassette.append(request, interactions[2]["response"]) + assert len(cassette._new_interactions()) == 1 + + used_interactions = cassette._played_interactions + cassette._new_interactions() + assert len(used_interactions) == 2