1import os
2import json
3import pytest
4import vcr
5from six.moves.urllib.request import urlopen
6
7
8def test_set_serializer_default_config(tmpdir, httpbin):
9    my_vcr = vcr.VCR(serializer='json')
10
11    with my_vcr.use_cassette(str(tmpdir.join('test.json'))):
12        assert my_vcr.serializer == 'json'
13        urlopen(httpbin.url + '/get')
14
15    with open(str(tmpdir.join('test.json'))) as f:
16        assert json.loads(f.read())
17
18
19def test_default_set_cassette_library_dir(tmpdir, httpbin):
20    my_vcr = vcr.VCR(cassette_library_dir=str(tmpdir.join('subdir')))
21
22    with my_vcr.use_cassette('test.json'):
23        urlopen(httpbin.url + '/get')
24
25    assert os.path.exists(str(tmpdir.join('subdir').join('test.json')))
26
27
28def test_override_set_cassette_library_dir(tmpdir, httpbin):
29    my_vcr = vcr.VCR(cassette_library_dir=str(tmpdir.join('subdir')))
30
31    cld = str(tmpdir.join('subdir2'))
32
33    with my_vcr.use_cassette('test.json', cassette_library_dir=cld):
34        urlopen(httpbin.url + '/get')
35
36    assert os.path.exists(str(tmpdir.join('subdir2').join('test.json')))
37    assert not os.path.exists(str(tmpdir.join('subdir').join('test.json')))
38
39
40def test_override_match_on(tmpdir, httpbin):
41    my_vcr = vcr.VCR(match_on=['method'])
42
43    with my_vcr.use_cassette(str(tmpdir.join('test.json'))):
44        urlopen(httpbin.url)
45
46    with my_vcr.use_cassette(str(tmpdir.join('test.json'))) as cass:
47        urlopen(httpbin.url + '/get')
48
49    assert len(cass) == 1
50    assert cass.play_count == 1
51
52
53def test_missing_matcher():
54    my_vcr = vcr.VCR()
55    my_vcr.register_matcher("awesome", object)
56    with pytest.raises(KeyError):
57        with my_vcr.use_cassette("test.yaml", match_on=['notawesome']):
58            pass
59