diff --git a/tests/unit/test_vcr.py b/tests/unit/test_vcr.py index 1f4d49a..92c85ab 100644 --- a/tests/unit/test_vcr.py +++ b/tests/unit/test_vcr.py @@ -47,31 +47,44 @@ def test_vcr_before_record_request_params(): if request.path != '/get': return request - test_vcr = VCR(filter_headers=('cookie',), before_record_request=before_record_cb, + test_vcr = VCR(filter_headers=('cookie', ('bert', 'ernie')), + before_record_request=before_record_cb, ignore_hosts=('www.test.com',), ignore_localhost=True, - filter_query_parameters=('foo',)) + filter_query_parameters=('foo', ('tom', 'jerry')), + filter_post_data_parameters=('posted', ('no', 'trespassing'))) with test_vcr.use_cassette('test') as cassette: - assert cassette.filter_request(Request('GET', base_path + 'get', '', {})) is None - assert cassette.filter_request(Request('GET', base_path + 'get2', '', {})) is not None + # Test explicit before_record_cb + request_get = Request('GET', base_path + 'get', '', {}) + assert cassette.filter_request(request_get) is None + request = Request('GET', base_path + 'get2', '', {}) + assert cassette.filter_request(request) is not None - assert cassette.filter_request(Request('GET', base_path + '?foo=bar', '', {})).query == [] - assert cassette.filter_request( - Request('GET', base_path + '?foo=bar', '', - {'cookie': 'test', 'other': 'fun'})).headers == {'other': 'fun'} - assert cassette.filter_request( - Request( - 'GET', base_path + '?foo=bar', '', - {'cookie': 'test', 'other': 'fun'} - ) - ).headers == {'other': 'fun'} + # Test filter_query_parameters + request = Request('GET', base_path + '?foo=bar', '', {}) + assert cassette.filter_request(request).query == [] + request = Request('GET', base_path + '?tom=nobody', '', {}) + assert cassette.filter_request(request).query == [('tom', 'jerry')] - assert cassette.filter_request(Request('GET', 'http://www.test.com' + '?foo=bar', '', - {'cookie': 'test', 'other': 'fun'})) is None + # Test filter_headers + request = Request('GET', base_path + '?foo=bar', '', + {'cookie': 'test', 'other': 'fun', 'bert': 'nobody'}) + assert (cassette.filter_request(request).headers == + {'other': 'fun', 'bert': 'ernie'}) + + # Test ignore_hosts + request = Request('GET', 'http://www.test.com' + '?foo=bar', '', + {'cookie': 'test', 'other': 'fun'}) + assert cassette.filter_request(request) is None + + # Test ignore_localhost + request = Request('GET', 'http://localhost:8000' + '?foo=bar', '', + {'cookie': 'test', 'other': 'fun'}) + assert cassette.filter_request(request) is None with test_vcr.use_cassette('test', before_record_request=None) as cassette: - # Test that before_record can be overwritten with - assert cassette.filter_request(Request('GET', base_path + 'get', '', {})) is not None + # Test that before_record can be overwritten in context manager. + assert cassette.filter_request(request_get) is not None def test_vcr_before_record_response_iterable(): diff --git a/vcr/config.py b/vcr/config.py index f12d0c7..728b17f 100644 --- a/vcr/config.py +++ b/vcr/config.py @@ -199,22 +199,28 @@ class VCR(object): 'ignore_localhost', self.ignore_localhost ) if filter_headers: + replacements = [h if isinstance(h, tuple) else (h, None) + for h in filter_headers] filter_functions.append( functools.partial( - filters.remove_headers, - headers_to_remove=filter_headers + filters.replace_headers, + replacements=replacements, ) ) if filter_query_parameters: + replacements = [p if isinstance(p, tuple) else (p, None) + for p in filter_query_parameters] filter_functions.append(functools.partial( - filters.remove_query_parameters, - query_parameters_to_remove=filter_query_parameters + filters.replace_query_parameters, + replacements=replacements, )) if filter_post_data_parameters: + replacements = [p if isinstance(p, tuple) else (p, None) + for p in filter_post_data_parameters] filter_functions.append( functools.partial( - filters.remove_post_data_parameters, - post_data_parameters_to_remove=filter_post_data_parameters + filters.replace_post_data_parameters, + replacements=replacements, ) )