@ -1,93 +1,86 @@
import os
import pytest
import shutil
from pathlib import Path
from cookiecutter import main
import pytest
CCDS_ROOT = os . path . abspath (
os . path . join (
__file__ ,
os . pardir ,
os . pardir
)
)
CCDS_ROOT = Path ( __file__ ) . parents [ 1 ] . resolve ( )
@pytest . fixture ( scope = ' function ' )
def default_baked_project ( tmpdir ) :
out_dir = str ( tmpdir . mkdir ( ' data-project ' ) )
temp = tmpdir . mkdir ( ' data-project ' )
out_dir = Path ( temp ) . resolve ( )
main . cookiecutter (
CCDS_ROOT ,
str ( 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 ' )
yield 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 ' )
readme_path = default_baked_project / ' README.md '
assert os . path . exists ( readme_path )
assert readme_ path. exists ( )
assert no_curlies ( readme_path )
def test_license ( default_baked_project ) :
license_path = os . path . join ( default_baked_project , ' LICENSE ' )
license_path = default_baked_project / ' LICENSE '
assert os . path . exists ( license_path )
assert license_ path. exists ( )
assert no_curlies ( license_path )
def test_requirements ( default_baked_project ) :
reqs_path = os . path . join ( default_baked_project , ' requirements.txt ' )
reqs_path = default_baked_project / ' requirements.txt '
assert os . path . exists ( reqs_path )
assert reqs_ path. exists ( )
assert no_curlies ( reqs_path )
def test_makefile ( default_baked_project ) :
makefile_path = os . path . join ( default_baked_project , ' Makefile ' )
makefile_path = default_baked_project / ' Makefile '
assert os . path . exists ( makefile_path )
assert makefile_ path. exists ( )
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' ) ,
' data/ external ' ,
' data/ interim ' ,
' data/ processed ' ,
' data/ raw ' ,
' docs ' ,
' models ' ,
' notebooks ' ,
' references ' ,
' reports ' ,
os . path . join ( ' reports ' , ' figures' ) ,
' reports/ figures ' ,
' src ' ,
os . path . join ( ' src ' , ' data' ) ,
os . path . join ( ' src ' , ' features' ) ,
os . path . join ( ' src ' , ' models' ) ,
os . path . join ( ' src ' , ' visualization' )
' src/ data ' ,
' src/ features ' ,
' src/ models ' ,
' src/ visualization ' ,
]
ignored_dirs = [
default_baked_project
str ( default_baked_project )
]
abs_expected_dirs = [ os . path . join ( default_baked_project , d ) for
d in expected_dirs ]
abs_expected_dirs = [ str ( 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
@ -106,5 +99,4 @@ def no_curlies(filepath):
]
template_strings_in_file = [ s in data for s in template_strings ]
return not any ( template_strings_in_file )