Files @ d9b506352a89
Branch filter:

Location: rattail-project/rattail/tests/test_files.py

Lance Edgar
Change behavior of `files.locking_copy()` function.

The test function has been doing its job well, I'm calling it the better
function at this point.
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

import os
from unittest import TestCase

import lockfile
from fixture import TempIO

from rattail import files


class TestLockingCopy(TestCase):

    def setUp(self):
        self.tmp = TempIO()
        self.src = self.tmp.mkdir(u'src')
        self.dst = self.tmp.mkdir(u'dst')
        self.src_file = self.src.putfile(u'somefile', b'')

    def test_normal_copy_succeeds(self):
        files.locking_copy(self.src_file, self.dst)
        dst_file = os.path.join(self.dst, u'somefile')
        self.assertTrue(os.path.exists(dst_file))
        self.assertTrue(os.path.isfile(dst_file))
        self.assertFalse(os.path.exists(os.path.join(self.dst, u'somefile.lock')))

    def test_copy_times_out_if_lock_already_exists(self):
        dst_lock = self.dst.mkdir(u'somefile.lock')
        self.assertRaises(lockfile.LockTimeout, files.locking_copy, self.src_file, self.dst, timeout=0.1)

    def test_lock_timeout_may_be_specified_as_string(self):
        dst_lock = self.dst.mkdir(u'somefile.lock')
        # string "float"
        self.assertRaises(lockfile.LockTimeout, files.locking_copy, self.src_file, self.dst, timeout=u'0.1')
        # string "integer"
        self.assertRaises(lockfile.LockTimeout, files.locking_copy, self.src_file, self.dst, timeout=u'1')