Completed
Pull Request — master (#868)
by
unknown
01:03
created

_test_symlink()   A

Complexity

Conditions 4

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
c 1
b 0
f 0
dl 0
loc 9
rs 9.2
1
# -*- coding: utf-8 -*-
2
3
"""
4
test_generate_symlinks
5
---------------------------------
6
"""
7
8
from __future__ import unicode_literals
9
import os
10
import pytest
11
12
from cookiecutter import generate
13
from cookiecutter import utils
14
15
TEST_OUTPUT_DIR = 'test_symlinks'
16
17
18
@pytest.fixture(scope='function')
19
def remove_test_dir(request):
20
    """
21
    Remove the folder that is created by the test.
22
    """
23
    def fin_remove_test_dir():
24
        if os.path.exists(TEST_OUTPUT_DIR):
25
            utils.rmtree(TEST_OUTPUT_DIR)
26
    request.addfinalizer(fin_remove_test_dir)
27
28
29
@pytest.mark.usefixtures('clean_system', 'remove_test_dir')
30
def test_generate_copy_without_render_extensions():
31
    generate.generate_files(
32
        context={
33
            'cookiecutter': {
34
                'name': TEST_OUTPUT_DIR,
35
                "link_dir": "rendered_dir",
36
                "sym_to_nontemp": "rendered_sym_to_original",
37
                "sym_to_temp": "rendered_sym_to_rendered_dir",
38
                "_copy_without_render": [
39
                    "copy_no_render"
40
                ]
41
            }
42
        },
43
        repo_dir='tests/test-generate-symlinks'
44
    )
45
46
    dir_contents = os.listdir(TEST_OUTPUT_DIR)
47
48
    assert 'copy_no_render' in dir_contents
49
    assert 'original' in dir_contents
50
    assert 'rendered_dir' in dir_contents
51
    assert 'rendered_sym_to_original' in dir_contents
52
    assert 'rendered_sym_to_rendered_dir' in dir_contents
53
    assert 'symlink' in dir_contents
54
55
    # Test links that have been rendered and copied
56
    def _test_symlink(root, link, points_to):
57
        assert os.path.islink(os.path.join(root, link))
58
59
        actual_points_to = os.readlink(os.path.join(root, link))
60
61
        if actual_points_to.endswith(os.sep):
62
            actual_points_to = actual_points_to[:-1]
63
64
        assert actual_points_to == points_to
65
66
    # normal symlink, not rendered target
67
    _test_symlink(TEST_OUTPUT_DIR, 'symlink', 'original')
68
69
    # normal symlink, rendered target
70
    _test_symlink(TEST_OUTPUT_DIR, 'symlink_to_rendered', 'rendered_dir')
71
72
    # rendered symlink, not rendered target
73
    _test_symlink(TEST_OUTPUT_DIR, 'rendered_sym_to_original', 'original')
74
75
    # rendered symlink, rendered target
76
    _test_symlink(TEST_OUTPUT_DIR, 'rendered_sym_to_rendered_dir',
77
                  'rendered_dir')
78
79
    # Test links that have not been rendered
80
    non_rendered_dir = os.path.join(TEST_OUTPUT_DIR, 'copy_no_render')
81
    non_rendered_dir_contents = os.listdir(non_rendered_dir)
82
83
    assert 'original' in non_rendered_dir_contents
84
    assert 'symlink' in non_rendered_dir_contents
85
    assert 'symlink_to_rendered' in non_rendered_dir_contents
86
    assert '{{ cookiecutter.link_dir }}' in non_rendered_dir_contents
87
    assert '{{ cookiecutter.sym_to_nontemp }}' in non_rendered_dir_contents
88
    assert '{{ cookiecutter.sym_to_temp }}' in non_rendered_dir_contents
89
90
    # normal symlink, not rendered target
91
    _test_symlink(non_rendered_dir, 'symlink', 'original')
92
93
    # normal symlink, rendered target
94
    _test_symlink(non_rendered_dir,
95
                 'symlink_to_rendered',
96
                 '{{ cookiecutter.link_dir }}')
97
98
    # rendered symlink, not rendered target
99
    _test_symlink(non_rendered_dir,
100
                  '{{ cookiecutter.sym_to_nontemp }}',
101
                  'original')
102
103
    # rendered symlink, rendered target
104
    _test_symlink(non_rendered_dir,
105
                  '{{ cookiecutter.sym_to_temp }}',
106
                  '{{ cookiecutter.link_dir }}')
107