# -*- coding: utf-8 -*-
'''Basic tests about save behavior'''

# External imports
import os
import time
from six.moves.urllib.request import urlopen

# Internal imports
import vcr


def test_disk_saver_nowrite(tmpdir, httpbin):
    '''
    Ensure that when you close a cassette without changing it it doesn't
    rewrite the file
    '''
    fname = str(tmpdir.join('synopsis.yaml'))
    with vcr.use_cassette(fname) as cass:
        urlopen(httpbin.url).read()
        assert cass.play_count == 0
    last_mod = os.path.getmtime(fname)

    with vcr.use_cassette(fname) as cass:
        urlopen(httpbin.url).read()
        assert cass.play_count == 1
        assert cass.dirty is False
    last_mod2 = os.path.getmtime(fname)

    assert last_mod == last_mod2


def test_disk_saver_write(tmpdir, httpbin):
    '''
    Ensure that when you close a cassette after changing it it does
    rewrite the file
    '''
    fname = str(tmpdir.join('synopsis.yaml'))
    with vcr.use_cassette(fname) as cass:
        urlopen(httpbin.url).read()
        assert cass.play_count == 0
    last_mod = os.path.getmtime(fname)

    # Make sure at least 1 second passes, otherwise sometimes
    # the mtime doesn't change
    time.sleep(1)

    with vcr.use_cassette(fname, record_mode='any') as cass:
        urlopen(httpbin.url).read()
        urlopen(httpbin.url + '/get').read()
        assert cass.play_count == 1
        assert cass.dirty
    last_mod2 = os.path.getmtime(fname)

    assert last_mod != last_mod2
