import logging
import os.path
from pytest import raises
import shutil

from .. import repo_utils
repo_utils.log.setLevel(logging.WARNING)


class TestRepoUtils(object):
    empty_repo = 'https://github.com/ceph/empty'
    local_dir = '/tmp/empty'

    def setup(self):
        assert not os.path.exists(self.local_dir)

    def teardown(self):
        shutil.rmtree(self.local_dir, ignore_errors=True)

    def test_existing_branch(self):
        repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'master')
        assert os.path.exists(self.local_dir)

    def test_non_existing_branch(self):
        with raises(repo_utils.BranchNotFoundError):
            repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'blah')
        assert not os.path.exists(self.local_dir)

    def test_multiple_calls_same_branch(self):
        repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'master')
        assert os.path.exists(self.local_dir)
        repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'master')
        assert os.path.exists(self.local_dir)
        repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'master')
        assert os.path.exists(self.local_dir)

    def test_multiple_calls_different_branches(self):
        with raises(repo_utils.BranchNotFoundError):
            repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'blah')
        assert not os.path.exists(self.local_dir)
        repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'master')
        assert os.path.exists(self.local_dir)
        repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'master')
        assert os.path.exists(self.local_dir)
        with raises(repo_utils.BranchNotFoundError):
            repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'blah')
        assert not os.path.exists(self.local_dir)
        repo_utils.checkout_repo(self.empty_repo, self.local_dir, 'master')
        assert os.path.exists(self.local_dir)

Add unit tests for repo_utils
Add unit tests for repo_utils

Signed-off-by: Zack Cerza <f801c831581d4150a2793939287636221d62131e@inktank.com>
