mirror of
				https://github.com/cookiecutter/cookiecutter-django.git
				synced 2025-11-01 00:17:54 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| import os
 | |
| import re
 | |
| import sh
 | |
| 
 | |
| import pytest
 | |
| from binaryornot.check import is_binary
 | |
| 
 | |
| PATTERN = "{{(\s?cookiecutter)[.](.*?)}}"
 | |
| RE_OBJ = re.compile(PATTERN)
 | |
| 
 | |
| 
 | |
| @pytest.fixture
 | |
| def context():
 | |
|     return {
 | |
|         "project_name": "My Test Project",
 | |
|         "repo_name": "my_test_project",
 | |
|         "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",
 | |
|         "now": "2015/01/13",
 | |
|         "year": "2015"
 | |
|     }
 | |
| 
 | |
| 
 | |
| 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
 | |
|     ]
 | |
| 
 | |
| 
 | |
| 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)
 | |
|             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
 | |
|     assert result.project.basename == context['repo_name']
 | |
|     assert result.project.isdir()
 | |
| 
 | |
|     paths = build_files_list(str(result.project))
 | |
|     assert paths
 | |
|     check_paths(paths)
 | |
| 
 | |
| 
 | |
| @pytest.fixture(params=['use_maildump', '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
 | |
|     assert result.project.basename == feature_context['repo_name']
 | |
|     assert result.project.isdir()
 | |
| 
 | |
|     paths = build_files_list(str(result.project))
 | |
|     assert paths
 | |
|     check_paths(paths)
 | |
| 
 | |
| 
 | |
| 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)
 |