1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
"""Collection of tests around cookiecutter's replay feature."""
from cookiecutter.main import cookiecutter
def test_original_cookiecutter_options_preserved_in__cookiecutter(
monkeypatch,
mocker,
user_config_file,
):
"""Preserve original context options.
Tests you can access the original context options via
`context['_cookiecutter']`.
"""
monkeypatch.chdir('tests/fake-repo-tmpl-_cookiecutter')
mock_generate_files = mocker.patch('cookiecutter.main.generate_files')
cookiecutter(
'.',
no_input=True,
replay=False,
config_file=user_config_file,
)
assert mock_generate_files.call_args[1]['context']['_cookiecutter'][
'test_list'
] == [1, 2, 3, 4]
assert mock_generate_files.call_args[1]['context']['_cookiecutter'][
'test_dict'
] == {"foo": "bar"}
def test_replay_dump_template_name(
monkeypatch, mocker, user_config_data, user_config_file
):
"""Check that replay_dump is called with a valid template_name.
Template name must not be a relative path.
Otherwise files such as ``..json`` are created, which are not just cryptic
but also later mistaken for replay files of other templates if invoked with
'.' and '--replay'.
Change the current working directory temporarily to 'tests/fake-repo-tmpl'
for this test and call cookiecutter with '.' for the target template.
"""
monkeypatch.chdir('tests/fake-repo-tmpl')
mock_replay_dump = mocker.patch('cookiecutter.main.dump')
mocker.patch('cookiecutter.main.generate_files')
cookiecutter(
'.',
no_input=True,
replay=False,
config_file=user_config_file,
)
mock_replay_dump.assert_called_once_with(
user_config_data['replay_dir'],
'fake-repo-tmpl',
mocker.ANY,
)
def test_replay_load_template_name(
monkeypatch, mocker, user_config_data, user_config_file
):
"""Check that replay_load is called correctly.
Calls require valid template_name that is not a relative path.
Change the current working directory temporarily to 'tests/fake-repo-tmpl'
for this test and call cookiecutter with '.' for the target template.
"""
monkeypatch.chdir('tests/fake-repo-tmpl')
mock_replay_load = mocker.patch('cookiecutter.main.load')
mocker.patch('cookiecutter.main.generate_context').return_value = {
'cookiecutter': {}
}
mocker.patch('cookiecutter.main.generate_files')
mocker.patch('cookiecutter.main.dump')
cookiecutter(
'.',
replay=True,
config_file=user_config_file,
)
mock_replay_load.assert_called_once_with(
user_config_data['replay_dir'],
'fake-repo-tmpl',
)
def test_custom_replay_file(monkeypatch, mocker, user_config_file):
"""Check that reply.load is called with the custom replay_file."""
monkeypatch.chdir('tests/fake-repo-tmpl')
mock_replay_load = mocker.patch('cookiecutter.main.load')
mocker.patch('cookiecutter.main.generate_context').return_value = {
'cookiecutter': {}
}
mocker.patch('cookiecutter.main.generate_files')
mocker.patch('cookiecutter.main.dump')
cookiecutter(
'.',
replay='./custom-replay-file',
config_file=user_config_file,
)
mock_replay_load.assert_called_once_with(
'.',
'custom-replay-file',
)
|