diff --git a/vcr/unittest/testcase.py b/vcr/unittest/testcase.py index 4e4d974..655edbd 100644 --- a/vcr/unittest/testcase.py +++ b/vcr/unittest/testcase.py @@ -2,14 +2,15 @@ import inspect import logging import os import unittest -from .. import VCR +from .. import VCR logger = logging.getLogger(__name__) class VCRMixin(object): """A TestCase mixin that provides VCR integration.""" + vcr_enabled = True def setUp(self): @@ -22,8 +23,8 @@ class VCRMixin(object): self.addCleanup(cm.__exit__, None, None, None) def _get_vcr(self, **kwargs): - if 'cassette_library_dir' not in kwargs: - kwargs['cassette_library_dir'] = self._get_cassette_library_dir() + if "cassette_library_dir" not in kwargs: + kwargs["cassette_library_dir"] = self._get_cassette_library_dir() return VCR(**kwargs) def _get_vcr_kwargs(self, **kwargs): @@ -31,11 +32,10 @@ class VCRMixin(object): def _get_cassette_library_dir(self): testdir = os.path.dirname(inspect.getfile(self.__class__)) - return os.path.join(testdir, 'cassettes') + return os.path.join(testdir, "cassettes") def _get_cassette_name(self): - return '{0}.{1}.yaml'.format(self.__class__.__name__, - self._testMethodName) + return "{0}.{1}.yaml".format(self.__class__.__name__, self._testMethodName) class VCRTestCase(VCRMixin, unittest.TestCase): diff --git a/vcr/unittest/tests/test_testcase.py b/vcr/unittest/tests/test_testcase.py index a799015..36bf3ac 100644 --- a/vcr/unittest/tests/test_testcase.py +++ b/vcr/unittest/tests/test_testcase.py @@ -1,107 +1,111 @@ import os +from unittest import TextTestRunner, defaultTestLoader from unittest.mock import MagicMock -from unittest import defaultTestLoader, TextTestRunner from urllib.request import urlopen + from ..testcase import VCRTestCase def test_defaults(): - class MyTest(VCRTestCase): def test_foo(self): pass test = run_testcase(MyTest)[0][0] - expected_path = os.path.join(os.path.dirname(__file__), 'cassettes') - expected_name = 'MyTest.test_foo.yaml' + expected_path = os.path.join(os.path.dirname(__file__), "cassettes") + expected_name = "MyTest.test_foo.yaml" assert os.path.dirname(test.cassette._path) == expected_path assert os.path.basename(test.cassette._path) == expected_name def test_disabled(): - # Baseline vcr_enabled = True class MyTest(VCRTestCase): def test_foo(self): pass + test = run_testcase(MyTest)[0][0] - assert hasattr(test, 'cassette') + assert hasattr(test, "cassette") # Test vcr_enabled = False class MyTest(VCRTestCase): vcr_enabled = False + def test_foo(self): pass + test = run_testcase(MyTest)[0][0] - assert not hasattr(test, 'cassette') + assert not hasattr(test, "cassette") def test_cassette_library_dir(): - class MyTest(VCRTestCase): def test_foo(self): pass + def _get_cassette_library_dir(self): - return '/testing' + return "/testing" test = run_testcase(MyTest)[0][0] - assert test.cassette._path.startswith('/testing/') + assert test.cassette._path.startswith("/testing/") def test_cassette_name(): - class MyTest(VCRTestCase): def test_foo(self): pass + def _get_cassette_name(self): - return 'my-custom-name' + return "my-custom-name" test = run_testcase(MyTest)[0][0] - assert os.path.basename(test.cassette._path) == 'my-custom-name' + assert os.path.basename(test.cassette._path) == "my-custom-name" def test_vcr_kwargs_overridden(): - class MyTest(VCRTestCase): def test_foo(self): pass + def _get_vcr_kwargs(self): kwargs = super(MyTest, self)._get_vcr_kwargs() - kwargs['record_mode'] = 'new_episodes' + kwargs["record_mode"] = "new_episodes" return kwargs test = run_testcase(MyTest)[0][0] - assert test.cassette.record_mode == 'new_episodes' + assert test.cassette.record_mode == "new_episodes" def test_vcr_kwargs_passed(): - class MyTest(VCRTestCase): def test_foo(self): pass + def _get_vcr_kwargs(self): return super(MyTest, self)._get_vcr_kwargs( - record_mode='new_episodes', + record_mode="new_episodes", ) test = run_testcase(MyTest)[0][0] - assert test.cassette.record_mode == 'new_episodes' + assert test.cassette.record_mode == "new_episodes" def test_vcr_kwargs_cassette_dir(): - # Test that _get_cassette_library_dir applies if cassette_library_dir # is absent from vcr kwargs. class MyTest(VCRTestCase): def test_foo(self): pass + def _get_vcr_kwargs(self): return dict( - record_mode='new_episodes', + record_mode="new_episodes", ) - _get_cassette_library_dir = MagicMock(return_value='/testing') + + _get_cassette_library_dir = MagicMock(return_value="/testing") + test = run_testcase(MyTest)[0][0] - assert test.cassette._path.startswith('/testing/') + assert test.cassette._path.startswith("/testing/") assert test._get_cassette_library_dir.call_count == 1 # Test that _get_cassette_library_dir is ignored if cassette_library_dir @@ -109,30 +113,35 @@ def test_vcr_kwargs_cassette_dir(): class MyTest(VCRTestCase): def test_foo(self): pass + def _get_vcr_kwargs(self): return dict( - cassette_library_dir='/testing', + cassette_library_dir="/testing", ) - _get_cassette_library_dir = MagicMock(return_value='/ignored') + + _get_cassette_library_dir = MagicMock(return_value="/ignored") + test = run_testcase(MyTest)[0][0] - assert test.cassette._path.startswith('/testing/') + assert test.cassette._path.startswith("/testing/") assert test._get_cassette_library_dir.call_count == 0 def test_get_vcr_with_matcher(tmpdir): - cassette_dir = tmpdir.mkdir('cassettes') + cassette_dir = tmpdir.mkdir("cassettes") assert len(cassette_dir.listdir()) == 0 - mock_matcher = MagicMock(return_value=True, __name__='MockMatcher') + mock_matcher = MagicMock(return_value=True, __name__="MockMatcher") class MyTest(VCRTestCase): def test_foo(self): - self.response = urlopen('http://example.com').read() + self.response = urlopen("http://example.com").read() + def _get_vcr(self): myvcr = super(MyTest, self)._get_vcr() - myvcr.register_matcher('mymatcher', mock_matcher) - myvcr.match_on = ['mymatcher'] + myvcr.register_matcher("mymatcher", mock_matcher) + myvcr.match_on = ["mymatcher"] return myvcr + def _get_cassette_library_dir(self): return str(cassette_dir) @@ -145,23 +154,27 @@ def test_get_vcr_with_matcher(tmpdir): test = run_testcase(MyTest)[0][0] assert len(test.cassette.requests) == 1 assert mock_matcher.called - assert repr(mock_matcher.mock_calls[0]) == 'call(, )' + assert ( + repr(mock_matcher.mock_calls[0]) + == "call(, )" + ) def test_testcase_playback(tmpdir): - cassette_dir = tmpdir.mkdir('cassettes') + cassette_dir = tmpdir.mkdir("cassettes") assert len(cassette_dir.listdir()) == 0 # First test actually reads from the web. class MyTest(VCRTestCase): def test_foo(self): - self.response = urlopen('http://example.com').read() + self.response = urlopen("http://example.com").read() + def _get_cassette_library_dir(self): return str(cassette_dir) test = run_testcase(MyTest)[0][0] - assert b'illustrative examples' in test.response + assert b"illustrative examples" in test.response assert len(test.cassette.requests) == 1 assert test.cassette.play_count == 0 @@ -169,7 +182,7 @@ def test_testcase_playback(tmpdir): test2 = run_testcase(MyTest)[0][0] assert test.cassette is not test2.cassette - assert b'illustrative examples' in test.response + assert b"illustrative examples" in test.response assert len(test2.cassette.requests) == 1 assert test2.cassette.play_count == 1