Basic sanity-check tests

This commit is contained in:
Peter Bull 2017-01-28 23:01:56 -05:00
parent 52119e38d1
commit e385aff019
3 changed files with 128 additions and 1 deletions

View File

@ -16,7 +16,7 @@ $ pip install cookiecutter
``` ```
or or
``` bash ``` bash
$ conda config --add channels conda-forge $ conda config --add channels conda-forge
$ conda install cookiecutter $ conda install cookiecutter
@ -30,3 +30,18 @@ $ conda install cookiecutter
[![asciicast](https://asciinema.org/a/9bgl5qh17wlop4xyxu9n9wr02.png)](https://asciinema.org/a/9bgl5qh17wlop4xyxu9n9wr02) [![asciicast](https://asciinema.org/a/9bgl5qh17wlop4xyxu9n9wr02.png)](https://asciinema.org/a/9bgl5qh17wlop4xyxu9n9wr02)
## Contributing
We welcome contributions! [See the docs for guidelines](https://drivendata.github.io/cookiecutter-data-science/#contributing).
### Installing development requirements
------------
pip install -r requirements.txt
### Running the tests
------------
py.test tests

View File

@ -1,3 +1,4 @@
mkdocs mkdocs
mkdocs-cinder mkdocs-cinder
cookiecutter cookiecutter
pytest

111
tests/test_creation.py Normal file
View File

@ -0,0 +1,111 @@
import os
import shutil
from cookiecutter import main
import pytest
CCDS_ROOT = os.path.abspath(
os.path.join(
__file__,
os.pardir,
os.pardir
)
)
@pytest.fixture(scope='function')
def default_baked_project(tmpdir):
out_dir = str(tmpdir.mkdir('data-project'))
main.cookiecutter(
CCDS_ROOT,
no_input=True,
extra_context={},
output_dir=out_dir
)
# default project name is project_name
yield os.path.join(out_dir, 'project_name')
# cleanup after
shutil.rmtree(out_dir)
def test_readme(default_baked_project):
readme_path = os.path.join(default_baked_project, 'README.md')
assert os.path.exists(readme_path)
assert no_curlies(readme_path)
def test_license(default_baked_project):
license_path = os.path.join(default_baked_project, 'LICENSE')
assert os.path.exists(license_path)
assert no_curlies(license_path)
def test_requirements(default_baked_project):
reqs_path = os.path.join(default_baked_project, 'requirements.txt')
assert os.path.exists(reqs_path)
assert no_curlies(reqs_path)
def test_makefile(default_baked_project):
makefile_path = os.path.join(default_baked_project, 'Makefile')
assert os.path.exists(makefile_path)
assert no_curlies(makefile_path)
def test_folders(default_baked_project):
expected_dirs = [
'data',
os.path.join('data', 'external'),
os.path.join('data', 'interim'),
os.path.join('data', 'processed'),
os.path.join('data', 'raw'),
'docs',
'models',
'notebooks',
'references',
'reports',
os.path.join('reports', 'figures'),
'src',
os.path.join('src', 'data'),
os.path.join('src', 'features'),
os.path.join('src', 'models'),
os.path.join('src', 'visualization')
]
ignored_dirs = [
default_baked_project,
os.path.join(default_baked_project, '__pycache__')
]
abs_expected_dirs = [os.path.join(default_baked_project, d) for
d in expected_dirs]
abs_dirs, _, _ = list(zip(*os.walk(default_baked_project)))
assert len(set(abs_expected_dirs + ignored_dirs) - set(abs_dirs)) == 0
def no_curlies(filepath):
""" Utility to make sure no curly braces appear in a file.
That is, was jinja able to render everthing?
"""
with open(filepath, 'r') as f:
data = f.read()
template_strings = [
'{{',
'}}',
'{%',
'%}'
]
template_strings_in_file = [s in data for s in template_strings]
return not any(template_strings_in_file)