# -*- coding: utf-8 -*- """Basic tests for cassettes""" # External imports import os from urllib.request import urlopen # Internal imports import vcr def test_nonexistent_directory(tmpdir, httpbin): """If we load a cassette in a nonexistent directory, it can save ok""" # Check to make sure directory doesnt exist assert not os.path.exists(str(tmpdir.join("nonexistent"))) # Run VCR to create dir and cassette file with vcr.use_cassette(str(tmpdir.join("nonexistent", "cassette.yml"))): urlopen(httpbin.url).read() # This should have made the file and the directory assert os.path.exists(str(tmpdir.join("nonexistent", "cassette.yml"))) def test_unpatch(tmpdir, httpbin): """Ensure that our cassette gets unpatched when we're done""" with vcr.use_cassette(str(tmpdir.join("unpatch.yaml"))) as cass: urlopen(httpbin.url).read() # Make the same request, and assert that we haven't served any more # requests out of cache urlopen(httpbin.url).read() assert cass.play_count == 0 def test_basic_json_use(tmpdir, httpbin): """ Ensure you can load a json serialized cassette """ test_fixture = str(tmpdir.join("synopsis.json")) with vcr.use_cassette(test_fixture, serializer="json"): response = urlopen(httpbin.url).read() assert b"difficult sometimes" in response def test_patched_content(tmpdir, httpbin): """ Ensure that what you pull from a cassette is what came from the request """ with vcr.use_cassette(str(tmpdir.join("synopsis.yaml"))) as cass: response = urlopen(httpbin.url).read() assert cass.play_count == 0 with vcr.use_cassette(str(tmpdir.join("synopsis.yaml"))) as cass: response2 = urlopen(httpbin.url).read() assert cass.play_count == 1 cass._save(force=True) with vcr.use_cassette(str(tmpdir.join("synopsis.yaml"))) as cass: response3 = urlopen(httpbin.url).read() assert cass.play_count == 1 assert response == response2 assert response2 == response3 def test_patched_content_json(tmpdir, httpbin): """ Ensure that what you pull from a json cassette is what came from the request """ testfile = str(tmpdir.join("synopsis.json")) with vcr.use_cassette(testfile) as cass: response = urlopen(httpbin.url).read() assert cass.play_count == 0 with vcr.use_cassette(testfile) as cass: response2 = urlopen(httpbin.url).read() assert cass.play_count == 1 cass._save(force=True) with vcr.use_cassette(testfile) as cass: response3 = urlopen(httpbin.url).read() assert cass.play_count == 1 assert response == response2 assert response2 == response3