# -*- coding: utf-8 -*- '''Tests for cassettes with custom persistence''' # External imports import os from six.moves.urllib.request import urlopen # Internal imports import vcr from vcr.persisters.filesystem import FilesystemPersister class CustomFilesystemPersister(object): '''Behaves just like DefaultFilePersister but adds .test extension to the cassette file''' @staticmethod def load_cassette(cassette_path, serializer): cassette_path += '.test' return FilesystemPersister().load_cassette(cassette_path, serializer) @staticmethod def save_cassette(cassette_path, cassette_dict, serializer): cassette_path += '.test' FilesystemPersister.save_cassette(cassette_path, cassette_dict, serializer) def test_save_cassette_with_custom_persister(tmpdir, httpbin): '''Ensure you can save a cassette using custom persister''' my_vcr = vcr.VCR() my_vcr.register_persister(CustomFilesystemPersister) # Check to make sure directory doesnt exist assert not os.path.exists(str(tmpdir.join('nonexistent'))) # Run VCR to create dir and cassette file using new save_cassette callback with my_vcr.use_cassette(str(tmpdir.join('nonexistent', 'cassette.yml'))): urlopen(httpbin.url).read() # Callback should have made the file and the directory assert os.path.exists(str(tmpdir.join('nonexistent', 'cassette.yml.test'))) def test_load_cassette_with_custom_persister(tmpdir, httpbin): ''' Ensure you can load a cassette using custom persister ''' my_vcr = vcr.VCR() my_vcr.register_persister(CustomFilesystemPersister) test_fixture = str(tmpdir.join('synopsis.json.test')) with my_vcr.use_cassette(test_fixture, serializer='json'): response = urlopen(httpbin.url).read() assert b'difficult sometimes' in response