cookiecutter-django/tests/test_cookiecutter_generation.py

89 lines
2.3 KiB
Python
Raw Permalink Normal View History

# -*- coding: utf-8 -*-
import os
import re
2015-11-09 02:02:07 +03:00
import sh
import pytest
from binaryornot.check import is_binary
2016-04-13 00:23:00 +03:00
PATTERN = '{{(\s?cookiecutter)[.](.*?)}}'
RE_OBJ = re.compile(PATTERN)
@pytest.fixture
def context():
return {
2016-04-13 00:23:00 +03:00
'project_name': 'My Test Project',
'project_slug': 'my_test_project',
2016-04-13 00:23:00 +03:00
'author_name': 'Test Author',
'email': 'test@example.com',
'description': 'A short description of the project.',
'domain_name': 'example.com',
'version': '0.1.0',
'timezone': 'UTC',
}
def build_files_list(root_dir):
"""Build a list containing absolute paths to the generated files."""
return [
os.path.join(dirpath, file_path)
for dirpath, subdirs, files in os.walk(root_dir)
for file_path in files
]
2015-11-09 02:02:07 +03:00
def check_paths(paths):
"""Method to check all paths have correct substitutions,
used by other tests cases
"""
# Assert that no match is found in any of the files
for path in paths:
if is_binary(path):
continue
for line in open(path, 'r'):
match = RE_OBJ.search(line)
2016-04-13 00:23:00 +03:00
msg = 'cookiecutter variable not replaced in {}'
assert match is None, msg.format(path)
def test_default_configuration(cookies, context):
result = cookies.bake(extra_context=context)
assert result.exit_code == 0
assert result.exception is None
2016-04-20 21:41:17 +03:00
assert result.project.basename == context['project_slug']
assert result.project.isdir()
paths = build_files_list(str(result.project))
assert paths
check_paths(paths)
2015-11-18 14:16:25 +03:00
@pytest.fixture(params=['use_mailhog', 'use_celery', 'windows'])
def feature_context(request, context):
context.update({request.param: 'y'})
return context
def test_enabled_features(cookies, feature_context):
result = cookies.bake(extra_context=feature_context)
assert result.exit_code == 0
assert result.exception is None
2016-04-20 21:41:17 +03:00
assert result.project.basename == feature_context['project_slug']
assert result.project.isdir()
paths = build_files_list(str(result.project))
assert paths
check_paths(paths)
2015-11-09 02:02:07 +03:00
def test_flake8_compliance(cookies):
"""generated project should pass flake8"""
result = cookies.bake()
try:
sh.flake8(str(result.project))
except sh.ErrorReturnCode as e:
pytest.fail(e)