Fix test decorators
These tests aren't actually run by nose because the private decorator doesn't properly wrap its test. This is also a useful pattern, and so we move it into its own file (note that even better would be to use testtools and fixtures, but that's a bigger refactor). In addition, we don't need to use the git CLI, when we have gitpython, which produces cleaner code and doesn't spray stuff all over our stderr. Finally, the outdir creating decorator wasn't as reusable as I thought it would be, so removing it for inline code for now. Change-Id: Ibe1b993235b68a1a59bc398ded9c822a02475570
This commit is contained in:
parent
46829604c3
commit
e0853bb40d
|
@ -12,52 +12,20 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import tempfile
|
||||
import unittest2 as unittest
|
||||
|
||||
from giftwrap.openstack_git_repo import OpenstackGitRepo
|
||||
from giftwrap.openstack_commit import OpenstackCommit
|
||||
|
||||
|
||||
def _make_outdir(test):
|
||||
def wrapper(*args, **kwargs):
|
||||
try:
|
||||
outdir = tempfile.mkdtemp()
|
||||
kwargs['outdir'] = outdir
|
||||
return test(*args, **kwargs)
|
||||
finally:
|
||||
shutil.rmtree(outdir)
|
||||
return wrapper
|
||||
|
||||
|
||||
def _make_test_repo(test):
|
||||
def wrapper(*args, **kwargs):
|
||||
startdir = os.getcwd()
|
||||
try:
|
||||
testrepo = tempfile.mkdtemp()
|
||||
kwargs['testrepo'] = testrepo
|
||||
os.chdir(testrepo)
|
||||
subprocess.check_call(['git', 'init'])
|
||||
tf_path = os.path.join(testrepo, 'testfile.txt')
|
||||
with open(tf_path, 'w') as tf:
|
||||
tf.write('test content')
|
||||
subprocess.check_call(['git', 'add', 'testfile.txt'])
|
||||
subprocess.check_call(['git', 'commit', '-m', 'test commit'])
|
||||
os.chdir(startdir)
|
||||
return test(*args, **kwargs)
|
||||
finally:
|
||||
shutil.rmtree(testrepo)
|
||||
return wrapper
|
||||
from giftwrap.tests import utils
|
||||
|
||||
|
||||
class TestRepo(unittest.TestCase):
|
||||
def test_repo(self):
|
||||
OpenstackGitRepo(None)
|
||||
|
||||
@_make_test_repo
|
||||
@utils.make_test_repo()
|
||||
def test_repo_properties(self, testrepo):
|
||||
repo = OpenstackGitRepo(testrepo, project='baz')
|
||||
self.assertFalse(repo.cloned)
|
||||
|
@ -68,11 +36,14 @@ class TestRepo(unittest.TestCase):
|
|||
except AttributeError:
|
||||
self.assertTrue(True)
|
||||
|
||||
@_make_outdir
|
||||
@_make_test_repo
|
||||
def test_repo_clone(self, outdir, testrepo):
|
||||
repo = OpenstackGitRepo(testrepo, project='bobafett')
|
||||
repo.clone(outdir)
|
||||
self.assertTrue(repo.cloned)
|
||||
self.assertTrue(isinstance(repo.head, OpenstackCommit))
|
||||
self.assertEquals(['HEAD', 'master'], repo.branches)
|
||||
@utils.make_test_repo()
|
||||
def test_repo_clone(self, testrepo):
|
||||
try:
|
||||
outdir = tempfile.mkdtemp()
|
||||
repo = OpenstackGitRepo(testrepo, project='bobafett')
|
||||
repo.clone(outdir)
|
||||
self.assertTrue(repo.cloned)
|
||||
self.assertTrue(isinstance(repo.head, OpenstackCommit))
|
||||
self.assertEquals(['HEAD', 'master'], repo.branches)
|
||||
finally:
|
||||
shutil.rmtree(outdir)
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import functools
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
import git
|
||||
|
||||
|
||||
def make_test_repo(name='testrepo'):
|
||||
def decorator(test):
|
||||
@functools.wraps(test)
|
||||
def wrapper(*args, **kwargs):
|
||||
try:
|
||||
testrepo = tempfile.mkdtemp()
|
||||
kwargs[name] = testrepo
|
||||
repo = git.Repo.init(testrepo)
|
||||
tf_path = os.path.join(testrepo, 'testfile.txt')
|
||||
with open(tf_path, 'w') as tf:
|
||||
tf.write('test content')
|
||||
repo.index.add([tf_path])
|
||||
repo.index.commit('test commit')
|
||||
return test(*args, **kwargs)
|
||||
finally:
|
||||
shutil.rmtree(testrepo)
|
||||
return wrapper
|
||||
return decorator
|
Loading…
Reference in New Issue