tests.test_generate_copy_without_render_override   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 61
dl 0
loc 96
rs 10
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A remove_test_dir() 0 6 2
B test_generate_copy_without_render_extensions() 0 77 1
1
"""Verify correct work of `_copy_without_render` context option."""
2
import os
3
from pathlib import Path
4
5
import pytest
6
7
from cookiecutter import generate
8
from cookiecutter import utils
9
10
11
@pytest.fixture
12
def remove_test_dir():
13
    """Fixture. Remove the folder that is created by the test."""
14
    yield
15
    if os.path.exists('test_copy_without_render'):
16
        utils.rmtree('test_copy_without_render')
17
18
19
@pytest.mark.usefixtures('clean_system', 'remove_test_dir')
20
def test_generate_copy_without_render_extensions():
21
    """Verify correct work of `_copy_without_render` context option.
22
23
    Some files/directories should be rendered during invocation,
24
    some just copied, without any modification.
25
    """
26
    # first run
27
    generate.generate_files(
28
        context={
29
            'cookiecutter': {
30
                'repo_name': 'test_copy_without_render',
31
                'render_test': 'I have been rendered!',
32
                '_copy_without_render': [
33
                    '*not-rendered',
34
                    'rendered/not_rendered.yml',
35
                    '*.txt',
36
                    '{{cookiecutter.repo_name}}-rendered/README.md',
37
                ],
38
            }
39
        },
40
        repo_dir='tests/test-generate-copy-without-render-override',
41
    )
42
43
    # second run with override flag to True
44
    generate.generate_files(
45
        context={
46
            'cookiecutter': {
47
                'repo_name': 'test_copy_without_render',
48
                'render_test': 'I have been rendered!',
49
                '_copy_without_render': [
50
                    '*not-rendered',
51
                    'rendered/not_rendered.yml',
52
                    '*.txt',
53
                    '{{cookiecutter.repo_name}}-rendered/README.md',
54
                ],
55
            }
56
        },
57
        overwrite_if_exists=True,
58
        repo_dir='tests/test-generate-copy-without-render',
59
    )
60
61
    dir_contents = os.listdir('test_copy_without_render')
62
63
    assert 'test_copy_without_render-not-rendered' in dir_contents
64
    assert 'test_copy_without_render-rendered' in dir_contents
65
66
    file_1 = Path('test_copy_without_render/README.txt').read_text()
67
    assert '{{cookiecutter.render_test}}' in file_1
68
69
    file_2 = Path('test_copy_without_render/README.rst').read_text()
70
    assert 'I have been rendered!' in file_2
71
72
    file_3 = Path(
73
        'test_copy_without_render/test_copy_without_render-rendered/README.txt'
74
    ).read_text()
75
    assert '{{cookiecutter.render_test}}' in file_3
76
77
    file_4 = Path(
78
        'test_copy_without_render/test_copy_without_render-rendered/README.rst'
79
    ).read_text()
80
    assert 'I have been rendered' in file_4
81
82
    file_5 = Path(
83
        'test_copy_without_render/'
84
        'test_copy_without_render-not-rendered/'
85
        'README.rst'
86
    ).read_text()
87
    assert '{{cookiecutter.render_test}}' in file_5
88
89
    file_6 = Path('test_copy_without_render/rendered/not_rendered.yml').read_text()
90
    assert '{{cookiecutter.render_test}}' in file_6
91
92
    file_7 = Path(
93
        'test_copy_without_render/' 'test_copy_without_render-rendered/' 'README.md'
94
    ).read_text()
95
    assert '{{cookiecutter.render_test}}' in file_7
96