from __future__ import absolute_import import jsonschema import pytest import time from plumbum import local import pre_commit.constants as C from pre_commit import git from pre_commit.clientlib.validate_config import CONFIG_JSON_SCHEMA @pytest.yield_fixture def empty_git_dir(tmpdir): with local.cwd(tmpdir.strpath): local['git']['init']() yield tmpdir.strpath def add_and_commit(): local['git']['add', '.']() local['git']['commit', '-m', 'random commit {0}'.format(time.time())]() @pytest.yield_fixture def dummy_git_repo(empty_git_dir): local['touch']['dummy']() add_and_commit() yield empty_git_dir @pytest.yield_fixture def python_pre_commit_git_repo(dummy_git_repo): local.path(C.MANIFEST_FILE).write(""" - id: foo name: Foo entry: foo language: python """) add_and_commit() local.path('setup.py').write(""" from setuptools import find_packages from setuptools import setup setup( name='Foo', version='0.0.0', packages=find_packages('.'), entry_points={ 'console_scripts': [ 'foo = foo.main:func' ], } ) """) foo_module = local.path('foo') foo_module.mkdir() with local.cwd(foo_module): local.path('__init__.py').write('') local.path('main.py').write(""" def func(): print 'Hello World' return 0 """) add_and_commit() yield dummy_git_repo @pytest.fixture def config_for_python_pre_commit_git_repo(python_pre_commit_git_repo): config = { 'repo': python_pre_commit_git_repo, 'sha': git.get_head_sha(python_pre_commit_git_repo), 'hooks': [{ 'id': 'foo', 'files': '*.py', }], } jsonschema.validate([config], CONFIG_JSON_SCHEMA) return config