============================= test session starts ==============================
platform linux -- Python 3.10.12, pytest-9.0.3, pluggy-1.6.0 -- /usr/bin/python
cachedir: .pytest_cache
metadata: {'Python': '3.10.12', 'Platform': 'Linux-6.8.0-1025-gke-x86_64-with-glibc2.35', 'Packages': {'pytest': '9.0.3', 'pluggy': '1.6.0'}, 'Plugins': {'anyio': '4.13.0', 'mock': '3.15.1', 'metadata': '3.1.1', 'json-report': '1.5.0', 'cov': '7.1.0'}}
rootdir: /workspace/cookiecutter
configfile: setup.cfg
plugins: anyio-4.13.0, mock-3.15.1, metadata-3.1.1, json-report-1.5.0, cov-7.1.0
collecting ... collected 371 items

tests/replay/test_dump.py::test_type_error_if_no_template_name PASSED    [  0%]
tests/replay/test_dump.py::test_type_error_if_not_dict_context PASSED    [  0%]
tests/replay/test_dump.py::test_value_error_if_key_missing_in_context PASSED [  0%]
tests/replay/test_dump.py::test_ioerror_if_replay_dir_creation_fails PASSED [  1%]
tests/replay/test_dump.py::test_run_json_dump PASSED                     [  1%]
tests/replay/test_load.py::test_type_error_if_no_template_name PASSED    [  1%]
tests/replay/test_load.py::test_value_error_if_key_missing_in_context PASSED [  1%]
tests/replay/test_load.py::test_io_error_if_no_replay_file PASSED        [  2%]
tests/replay/test_load.py::test_run_json_load PASSED                     [  2%]
tests/replay/test_replay.py::test_get_replay_file_name[bar] PASSED       [  2%]
tests/replay/test_replay.py::test_get_replay_file_name[bar.json] PASSED  [  2%]
tests/replay/test_replay.py::test_raise_on_invalid_mode[invalid_kwargs0] PASSED [  3%]
tests/replay/test_replay.py::test_raise_on_invalid_mode[invalid_kwargs1] PASSED [  3%]
tests/replay/test_replay.py::test_raise_on_invalid_mode[invalid_kwargs2] PASSED [  3%]
tests/replay/test_replay.py::test_main_does_not_invoke_dump_but_load PASSED [  4%]
tests/replay/test_replay.py::test_main_does_not_invoke_load_but_dump PASSED [  4%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Simple expansion] PASSED [  4%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Skip expansion (expansion not an abbreviation)] PASSED [  4%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Expansion prefix] PASSED [  5%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[expansion_override_builtin] PASSED [  5%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[expansion_prefix_ignores_suffix] PASSED [  5%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Correct expansion for builtin abbreviations (github)] PASSED [  5%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Correct expansion for builtin abbreviations (gitlab)] PASSED [  6%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Correct expansion for builtin abbreviations (bitbucket)] PASSED [  6%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion_prefix_not_0_in_braces PASSED [  6%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_zipfile_unzip[/path/to/zipfile.zip-False] PASSED [  7%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_zipfile_unzip[https://example.com/path/to/zipfile.zip-True] PASSED [  7%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_zipfile_unzip[http://example.com/path/to/zipfile.zip-True] PASSED [  7%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_repository_url_should_clone PASSED [  7%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_repository_url_with_no_context_file PASSED [  8%]
tests/repository/test_determine_repo_dir_finds_existing_cookiecutter.py::test_should_find_existing_cookiecutter PASSED [  8%]
tests/repository/test_determine_repo_dir_finds_subdirectories.py::test_should_find_existing_cookiecutter PASSED [  8%]
tests/repository/test_determine_repo_dir_finds_subdirectories.py::test_local_repo_typo PASSED [  8%]
tests/repository/test_determine_repository_should_use_local_repo.py::test_finds_local_repo PASSED [  9%]
tests/repository/test_determine_repository_should_use_local_repo.py::test_local_repo_with_no_context_raises PASSED [  9%]
tests/repository/test_determine_repository_should_use_local_repo.py::test_local_repo_typo PASSED [  9%]
tests/repository/test_is_repo_url.py::test_is_zip_file[/path/to/zipfile.zip] PASSED [  9%]
tests/repository/test_is_repo_url.py::test_is_zip_file[https://example.com/path/to/zipfile.zip] PASSED [ 10%]
tests/repository/test_is_repo_url.py::test_is_zip_file[http://example.com/path/to/zipfile.zip] PASSED [ 10%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[gitolite@server:team/repo] PASSED [ 10%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[git@github.com:audreyfeldroy/cookiecutter.git] PASSED [ 11%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[https://github.com/cookiecutter/cookiecutter.git] PASSED [ 11%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[git+https://private.com/gitrepo] PASSED [ 11%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[hg+https://private.com/mercurialrepo] PASSED [ 11%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[https://bitbucket.org/pokoli/cookiecutter.hg] PASSED [ 12%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[file://server/path/to/repo.git] PASSED [ 12%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_local_urls[/audreyr/cookiecutter.git] PASSED [ 12%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_local_urls[/home/audreyr/cookiecutter] PASSED [ 12%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_local_urls[c:\\users\\foo\\appdata\\local\\temp\\1\\pytest-0\\test_default_output_dir0\\template] PASSED [ 13%]
tests/repository/test_is_repo_url.py::test_expand_abbreviations PASSED   [ 13%]
tests/repository/test_repository_has_cookiecutter_json.py::test_valid_repository PASSED [ 13%]
tests/repository/test_repository_has_cookiecutter_json.py::test_invalid_repository[tests/fake-repo-bad] PASSED [ 14%]
tests/repository/test_repository_has_cookiecutter_json.py::test_invalid_repository[tests/unknown-repo] PASSED [ 14%]
tests/test_abort_generate_on_hook_error.py::test_hooks_raises_errors[pre_gen_hook_raises_error] PASSED [ 14%]
tests/test_abort_generate_on_hook_error.py::test_hooks_raises_errors[post_gen_hook_raises_error] PASSED [ 14%]
tests/test_cli.py::test_cli_version[-V] PASSED                           [ 15%]
tests/test_cli.py::test_cli_version[--version] PASSED                    [ 15%]
tests/test_cli.py::test_cli_error_on_existing_output_directory PASSED    [ 15%]
tests/test_cli.py::test_cli PASSED                                       [ 15%]
tests/test_cli.py::test_cli_verbose PASSED                               [ 16%]
tests/test_cli.py::test_cli_replay PASSED                                [ 16%]
tests/test_cli.py::test_cli_replay_file PASSED                           [ 16%]
tests/test_cli.py::test_cli_replay_generated PASSED                      [ 16%]
tests/test_cli.py::test_cli_exit_on_noinput_and_replay PASSED            [ 17%]
tests/test_cli.py::test_run_cookiecutter_on_overwrite_if_exists_and_replay[-f] PASSED [ 17%]
tests/test_cli.py::test_run_cookiecutter_on_overwrite_if_exists_and_replay[--overwrite-if-exists] PASSED [ 17%]
tests/test_cli.py::test_cli_overwrite_if_exists_when_output_dir_does_not_exist[-f] PASSED [ 18%]
tests/test_cli.py::test_cli_overwrite_if_exists_when_output_dir_does_not_exist[--overwrite-if-exists] PASSED [ 18%]
tests/test_cli.py::test_cli_overwrite_if_exists_when_output_dir_exists[-f] PASSED [ 18%]
tests/test_cli.py::test_cli_overwrite_if_exists_when_output_dir_exists[--overwrite-if-exists] PASSED [ 18%]
tests/test_cli.py::test_cli_output_dir[-o] PASSED                        [ 19%]
tests/test_cli.py::test_cli_output_dir[--output-dir] PASSED              [ 19%]
tests/test_cli.py::test_cli_help[-h] PASSED                              [ 19%]
tests/test_cli.py::test_cli_help[--help] PASSED                          [ 19%]
tests/test_cli.py::test_cli_help[help] PASSED                            [ 20%]
tests/test_cli.py::test_user_config PASSED                               [ 20%]
tests/test_cli.py::test_default_user_config_overwrite PASSED             [ 20%]
tests/test_cli.py::test_default_user_config PASSED                       [ 21%]
tests/test_cli.py::test_echo_undefined_variable_error PASSED             [ 21%]
tests/test_cli.py::test_echo_unknown_extension_error PASSED              [ 21%]
tests/test_cli.py::test_local_extension PASSED                           [ 21%]
tests/test_cli.py::test_local_extension_not_available PASSED             [ 22%]
tests/test_cli.py::test_cli_extra_context PASSED                         [ 22%]
tests/test_cli.py::test_cli_extra_context_invalid_format PASSED          [ 22%]
tests/test_cli.py::test_debug_file_non_verbose PASSED                    [ 22%]
tests/test_cli.py::test_debug_file_verbose PASSED                        [ 23%]
tests/test_cli.py::test_debug_list_installed_templates PASSED            [ 23%]
tests/test_cli.py::test_debug_list_installed_templates_failure PASSED    [ 23%]
tests/test_cli.py::test_directory_repo PASSED                            [ 23%]
tests/test_cli.py::test_cli_accept_hooks[-o---accept-hooks=yes-None-True] PASSED [ 24%]
tests/test_cli.py::test_cli_accept_hooks[-o---accept-hooks=no-None-False] PASSED [ 24%]
tests/test_cli.py::test_cli_accept_hooks[-o---accept-hooks=ask-yes-True] PASSED [ 24%]
tests/test_cli.py::test_cli_accept_hooks[-o---accept-hooks=ask-no-False] PASSED [ 25%]
tests/test_cli.py::test_cli_accept_hooks[--output-dir---accept-hooks=yes-None-True] PASSED [ 25%]
tests/test_cli.py::test_cli_accept_hooks[--output-dir---accept-hooks=no-None-False] PASSED [ 25%]
tests/test_cli.py::test_cli_accept_hooks[--output-dir---accept-hooks=ask-yes-True] PASSED [ 25%]
tests/test_cli.py::test_cli_accept_hooks[--output-dir---accept-hooks=ask-no-False] PASSED [ 26%]
tests/test_cli.py::test_cli_with_json_decoding_error PASSED              [ 26%]
tests/test_cli.py::test_cli_with_pre_prompt_hook PASSED                  [ 26%]
tests/test_cli.py::test_cli_with_pre_prompt_hook_fail PASSED             [ 26%]
tests/test_cookiecutter_invocation.py::test_should_invoke_main FAILED    [ 27%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_no_input_return_project_dir[tests/fake-repo-pre/] PASSED [ 27%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_no_input_return_project_dir[tests/fake-repo-pre] PASSED [ 27%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_no_input_extra_context PASSED [ 28%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_templated_context PASSED [ 28%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_no_input_return_rendered_file PASSED [ 28%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_dict_values_in_context PASSED [ 28%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_template_cleanup PASSED [ 29%]
tests/test_cookiecutter_local_with_input.py::test_cookiecutter_local_with_input PASSED [ 29%]
tests/test_cookiecutter_local_with_input.py::test_cookiecutter_input_extra_context PASSED [ 29%]
tests/test_cookiecutter_nested_templates.py::test_cookiecutter_nested_templates[fake-nested-templates-fake-project] PASSED [ 29%]
tests/test_cookiecutter_nested_templates.py::test_cookiecutter_nested_templates[fake-nested-templates-old-style-fake-package] PASSED [ 30%]
tests/test_custom_extensions_in_hooks.py::test_hook_with_extension[pre_gen_hook] PASSED [ 30%]
tests/test_custom_extensions_in_hooks.py::test_hook_with_extension[post_gen_hook] PASSED [ 30%]
tests/test_default_extensions.py::test_jinja2_time_extension PASSED      [ 30%]
tests/test_default_extensions.py::test_jinja2_slugify_extension PASSED   [ 31%]
tests/test_default_extensions.py::test_jinja2_uuid_extension PASSED      [ 31%]
tests/test_environment.py::test_env_should_raise_for_unknown_extension PASSED [ 31%]
tests/test_environment.py::test_env_should_come_with_default_extensions PASSED [ 32%]
tests/test_exceptions.py::test_undefined_variable_to_str PASSED          [ 32%]
tests/test_find.py::test_find_template[template with default jinja strings] PASSED [ 32%]
tests/test_find.py::test_find_template[template with custom jinja strings] PASSED [ 32%]
tests/test_find.py::test_find_template[template with custom jinja strings but folder with default jinja strings] PASSED [ 33%]
tests/test_find.py::test_find_template[template missing folder] PASSED   [ 33%]
tests/test_generate_context.py::test_generate_context[input_params0-expected_context0] PASSED [ 33%]
tests/test_generate_context.py::test_generate_context[input_params1-expected_context1] PASSED [ 33%]
tests/test_generate_context.py::test_generate_context[input_params2-expected_context2] PASSED [ 34%]
tests/test_generate_context.py::test_generate_context[input_params3-expected_context3] PASSED [ 34%]
tests/test_generate_context.py::test_generate_context_with_json_decoding_error PASSED [ 34%]
tests/test_generate_context.py::test_default_context_replacement_in_generate_context PASSED [ 35%]
tests/test_generate_context.py::test_generate_context_decodes_non_ascii_chars PASSED [ 35%]
tests/test_generate_context.py::test_apply_overwrites_does_include_unused_variables PASSED [ 35%]
tests/test_generate_context.py::test_apply_overwrites_sets_non_list_value PASSED [ 35%]
tests/test_generate_context.py::test_apply_overwrites_does_not_modify_choices_for_invalid_overwrite PASSED [ 36%]
tests/test_generate_context.py::test_apply_overwrites_invalid_overwrite PASSED [ 36%]
tests/test_generate_context.py::test_apply_overwrites_sets_multichoice_values PASSED [ 36%]
tests/test_generate_context.py::test_apply_overwrites_invalid_multichoice_values PASSED [ 36%]
tests/test_generate_context.py::test_apply_overwrites_error_additional_values PASSED [ 37%]
tests/test_generate_context.py::test_apply_overwrites_in_dictionaries PASSED [ 37%]
tests/test_generate_context.py::test_apply_overwrites_sets_default_for_choice_variable PASSED [ 37%]
tests/test_generate_context.py::test_apply_overwrites_in_nested_dict PASSED [ 38%]
tests/test_generate_context.py::test_apply_overwrite_context_as_in_nested_dict_with_additional_values PASSED [ 38%]
tests/test_generate_context.py::test_apply_overwrites_in_nested_dict_additional_values PASSED [ 38%]
tests/test_generate_copy_without_render.py::test_generate_copy_without_render_extensions PASSED [ 38%]
tests/test_generate_copy_without_render_override.py::test_generate_copy_without_render_extensions PASSED [ 39%]
tests/test_generate_file.py::test_generate_file PASSED                   [ 39%]
tests/test_generate_file.py::test_generate_file_jsonify_filter PASSED    [ 39%]
tests/test_generate_file.py::test_generate_file_random_ascii_string[True-10] PASSED [ 39%]
tests/test_generate_file.py::test_generate_file_random_ascii_string[True-40] PASSED [ 40%]
tests/test_generate_file.py::test_generate_file_random_ascii_string[False-10] PASSED [ 40%]
tests/test_generate_file.py::test_generate_file_random_ascii_string[False-40] PASSED [ 40%]
tests/test_generate_file.py::test_generate_file_with_true_condition PASSED [ 40%]
tests/test_generate_file.py::test_generate_file_with_false_condition PASSED [ 41%]
tests/test_generate_file.py::test_generate_file_verbose_template_syntax_error PASSED [ 41%]
tests/test_generate_file.py::test_generate_file_does_not_translate_lf_newlines_to_crlf PASSED [ 41%]
tests/test_generate_file.py::test_generate_file_does_not_translate_crlf_newlines_to_lf PASSED [ 42%]
tests/test_generate_file.py::test_generate_file_handles_mixed_line_endings PASSED [ 42%]
tests/test_generate_files.py::test_generate_files_nontemplated_exception PASSED [ 42%]
tests/test_generate_files.py::test_generate_files PASSED                 [ 42%]
tests/test_generate_files.py::test_generate_files_with_linux_newline PASSED [ 43%]
tests/test_generate_files.py::test_generate_files_with_jinja2_environment PASSED [ 43%]
tests/test_generate_files.py::test_generate_files_with_trailing_newline_forced_to_linux_by_context PASSED [ 43%]
tests/test_generate_files.py::test_generate_files_with_windows_newline PASSED [ 43%]
tests/test_generate_files.py::test_generate_files_with_windows_newline_forced_to_linux_by_context PASSED [ 44%]
tests/test_generate_files.py::test_generate_files_binaries PASSED        [ 44%]
tests/test_generate_files.py::test_generate_files_absolute_path PASSED   [ 44%]
tests/test_generate_files.py::test_generate_files_output_dir PASSED      [ 45%]
tests/test_generate_files.py::test_generate_files_permissions PASSED     [ 45%]
tests/test_generate_files.py::test_generate_files_with_overwrite_if_exists_with_skip_if_file_exists PASSED [ 45%]
tests/test_generate_files.py::test_generate_files_with_skip_if_file_exists PASSED [ 45%]
tests/test_generate_files.py::test_generate_files_with_overwrite_if_exists PASSED [ 46%]
tests/test_generate_files.py::test_raise_undefined_variable_file_name PASSED [ 46%]
tests/test_generate_files.py::test_raise_undefined_variable_file_name_existing_project PASSED [ 46%]
tests/test_generate_files.py::test_raise_undefined_variable_file_content PASSED [ 46%]
tests/test_generate_files.py::test_raise_undefined_variable_dir_name PASSED [ 47%]
tests/test_generate_files.py::test_keep_project_dir_on_failure PASSED    [ 47%]
tests/test_generate_files.py::test_raise_undefined_variable_dir_name_existing_project PASSED [ 47%]
tests/test_generate_files.py::test_raise_undefined_variable_project_dir PASSED [ 47%]
tests/test_generate_hooks.py::test_ignore_hooks_dirs PASSED              [ 48%]
tests/test_generate_hooks.py::test_run_python_hooks PASSED               [ 48%]
tests/test_generate_hooks.py::test_run_python_hooks_cwd PASSED           [ 48%]
tests/test_generate_hooks.py::test_empty_hooks PASSED                    [ 49%]
tests/test_generate_hooks.py::test_oserror_hooks PASSED                  [ 49%]
tests/test_generate_hooks.py::test_run_failing_hook_removes_output_directory PASSED [ 49%]
tests/test_generate_hooks.py::test_run_failing_hook_preserves_existing_output_directory PASSED [ 49%]
tests/test_generate_hooks.py::test_run_shell_hooks PASSED                [ 50%]
tests/test_generate_hooks.py::test_run_shell_hooks_win SKIPPED (Win only
test)                                                                    [ 50%]
tests/test_generate_hooks.py::test_ignore_shell_hooks PASSED             [ 50%]
tests/test_generate_hooks.py::test_deprecate_run_hook_from_repo_dir PASSED [ 50%]
tests/test_get_config.py::test_merge_configs PASSED                      [ 51%]
tests/test_get_config.py::test_get_config PASSED                         [ 51%]
tests/test_get_config.py::test_get_config_does_not_exist PASSED          [ 51%]
tests/test_get_config.py::test_invalid_config PASSED                     [ 52%]
tests/test_get_config.py::test_get_config_with_defaults PASSED           [ 52%]
tests/test_get_config.py::test_get_config_empty_config_file PASSED       [ 52%]
tests/test_get_config.py::test_get_config_invalid_file_with_array_as_top_level_element PASSED [ 52%]
tests/test_get_config.py::test_get_config_invalid_file_with_multiple_docs PASSED [ 53%]
tests/test_get_user_config.py::test_get_user_config_valid PASSED         [ 53%]
tests/test_get_user_config.py::test_get_user_config_invalid PASSED       [ 53%]
tests/test_get_user_config.py::test_get_user_config_nonexistent PASSED   [ 53%]
tests/test_get_user_config.py::test_specify_config_path PASSED           [ 54%]
tests/test_get_user_config.py::test_default_config_path PASSED           [ 54%]
tests/test_get_user_config.py::test_default_config_from_env_variable PASSED [ 54%]
tests/test_get_user_config.py::test_force_default_config PASSED          [ 54%]
tests/test_get_user_config.py::test_expand_user_for_directories_in_config PASSED [ 55%]
tests/test_get_user_config.py::test_expand_vars_for_directories_in_config PASSED [ 55%]
tests/test_get_user_config.py::test_specify_config_values PASSED         [ 55%]
tests/test_hooks.py::TestFindHooks::test_find_hook PASSED                [ 56%]
tests/test_hooks.py::TestFindHooks::test_no_hooks PASSED                 [ 56%]
tests/test_hooks.py::TestFindHooks::test_unknown_hooks_dir PASSED        [ 56%]
tests/test_hooks.py::TestFindHooks::test_hook_not_found PASSED           [ 56%]
tests/test_hooks.py::TestExternalHooks::test_run_script PASSED           [ 57%]
tests/test_hooks.py::TestExternalHooks::test_run_failing_script PASSED   [ 57%]
tests/test_hooks.py::TestExternalHooks::test_run_failing_script_enoexec PASSED [ 57%]
tests/test_hooks.py::TestExternalHooks::test_run_script_cwd PASSED       [ 57%]
tests/test_hooks.py::TestExternalHooks::test_run_script_with_context PASSED [ 58%]
tests/test_hooks.py::TestExternalHooks::test_run_hook PASSED             [ 58%]
tests/test_hooks.py::TestExternalHooks::test_run_failing_hook PASSED     [ 58%]
tests/test_hooks.py::test_ignore_hook_backup_files PASSED                [ 59%]
tests/test_log.py::test_info_stdout_logging PASSED                       [ 59%]
tests/test_log.py::test_debug_stdout_logging PASSED                      [ 59%]
tests/test_log.py::test_debug_file_logging PASSED                        [ 59%]
tests/test_main.py::test_original_cookiecutter_options_preserved_in__cookiecutter PASSED [ 60%]
tests/test_main.py::test_replay_dump_template_name PASSED                [ 60%]
tests/test_main.py::test_replay_load_template_name PASSED                [ 60%]
tests/test_main.py::test_custom_replay_file PASSED                       [ 60%]
tests/test_output_folder.py::test_output_folder PASSED                   [ 61%]
tests/test_output_folder.py::test_exception_when_output_folder_exists PASSED [ 61%]
tests/test_pre_prompt_hooks.py::test_run_pre_prompt_python_hook PASSED   [ 61%]
tests/test_pre_prompt_hooks.py::test_run_pre_prompt_python_hook_fail PASSED [ 61%]
tests/test_pre_prompt_hooks.py::test_run_pre_prompt_shell_hook PASSED    [ 62%]
tests/test_preferred_encoding.py::test_not_ascii PASSED                  [ 62%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[1-1] PASSED [ 62%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[True-True] PASSED [ 63%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[foo-foo] PASSED [ 63%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[{{cookiecutter.project}}-foobar] PASSED [ 63%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[None-None] PASSED [ 63%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str_complex_variables[raw_var0-rendered_var0] PASSED [ 64%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str_complex_variables[raw_var1-rendered_var1] PASSED [ 64%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str_complex_variables[raw_var2-rendered_var2] PASSED [ 64%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config[ASCII default prompt/input] PASSED [ 64%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config[Unicode default prompt/input] PASSED [ 65%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_with_human_prompts[ASCII default prompt/input] PASSED [ 65%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_with_human_choices[context0] PASSED [ 65%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_with_human_choices[context1] PASSED [ 66%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_with_human_choices[context2] PASSED [ 66%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_dict PASSED     [ 66%]
tests/test_prompt.py::TestPrompt::test_should_render_dict PASSED         [ 66%]
tests/test_prompt.py::TestPrompt::test_should_render_deep_dict PASSED    [ 67%]
tests/test_prompt.py::TestPrompt::test_should_render_deep_dict_with_human_prompts PASSED [ 67%]
tests/test_prompt.py::TestPrompt::test_internal_use_no_human_prompts PASSED [ 67%]
tests/test_prompt.py::TestPrompt::test_prompt_for_templated_config PASSED [ 67%]
tests/test_prompt.py::TestPrompt::test_dont_prompt_for_private_context_var PASSED [ 68%]
tests/test_prompt.py::TestPrompt::test_should_render_private_variables_with_two_underscores PASSED [ 68%]
tests/test_prompt.py::TestPrompt::test_should_not_render_private_variables PASSED [ 68%]
tests/test_prompt.py::TestReadUserChoice::test_should_invoke_read_user_choice PASSED [ 69%]
tests/test_prompt.py::TestReadUserChoice::test_should_invoke_read_user_variable PASSED [ 69%]
tests/test_prompt.py::TestReadUserChoice::test_should_render_choices PASSED [ 69%]
tests/test_prompt.py::TestPromptChoiceForConfig::test_should_return_first_option_if_no_input PASSED [ 69%]
tests/test_prompt.py::TestPromptChoiceForConfig::test_should_read_user_choice PASSED [ 70%]
tests/test_prompt.py::TestReadUserYesNo::test_should_invoke_read_user_yes_no[True] PASSED [ 70%]
tests/test_prompt.py::TestReadUserYesNo::test_should_invoke_read_user_yes_no[False] PASSED [ 70%]
tests/test_prompt.py::TestReadUserYesNo::test_boolean_parameter_no_input PASSED [ 70%]
tests/test_prompt.py::test_undefined_variable[Undefined variable in cookiecutter dict] PASSED [ 71%]
tests/test_prompt.py::test_undefined_variable[Undefined variable in cookiecutter dict with choices] PASSED [ 71%]
tests/test_prompt.py::test_undefined_variable[Undefined variable in cookiecutter dict with dict_key] PASSED [ 71%]
tests/test_prompt.py::test_undefined_variable[Undefined variable in cookiecutter dict with key_value] PASSED [ 71%]
tests/test_prompt.py::test_cookiecutter_nested_templates[fake-nested-templates-fake-project] PASSED [ 72%]
tests/test_prompt.py::test_cookiecutter_nested_templates[fake-nested-templates-old-style-fake-package] PASSED [ 72%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_paths[] PASSED [ 72%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_paths[/tmp] PASSED [ 73%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_paths[/foo] PASSED [ 73%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_win_paths[] SKIPPED [ 73%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_win_paths[C:/tmp] SKIPPED [ 73%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_win_paths[D:/tmp] SKIPPED [ 74%]
tests/test_prompt.py::test_prompt_should_ask_and_rm_repo_dir PASSED      [ 74%]
tests/test_prompt.py::test_prompt_should_ask_and_exit_on_user_no_answer PASSED [ 74%]
tests/test_prompt.py::test_prompt_should_ask_and_rm_repo_file PASSED     [ 74%]
tests/test_prompt.py::test_prompt_should_ask_and_keep_repo_on_no_reuse PASSED [ 75%]
tests/test_prompt.py::test_prompt_should_ask_and_keep_repo_on_reuse PASSED [ 75%]
tests/test_prompt.py::test_prompt_should_not_ask_if_no_input_and_rm_repo_dir PASSED [ 75%]
tests/test_prompt.py::test_prompt_should_not_ask_if_no_input_and_rm_repo_file PASSED [ 76%]
tests/test_read_repo_password.py::test_click_invocation PASSED           [ 76%]
tests/test_read_user_choice.py::test_click_invocation[1-hello] PASSED    [ 76%]
tests/test_read_user_choice.py::test_click_invocation[2-world] PASSED    [ 76%]
tests/test_read_user_choice.py::test_click_invocation[3-foo] PASSED      [ 77%]
tests/test_read_user_choice.py::test_click_invocation[4-bar] PASSED      [ 77%]
tests/test_read_user_choice.py::test_raise_if_options_is_not_a_non_empty_list PASSED [ 77%]
tests/test_read_user_dict.py::test_process_json_invalid_json PASSED      [ 77%]
tests/test_read_user_dict.py::test_process_json_non_dict PASSED          [ 78%]
tests/test_read_user_dict.py::test_process_json_valid_json PASSED        [ 78%]
tests/test_read_user_dict.py::test_process_json_deep_dict PASSED         [ 78%]
tests/test_read_user_dict.py::test_should_raise_type_error PASSED        [ 78%]
tests/test_read_user_dict.py::test_should_call_prompt_with_process_json PASSED [ 79%]
tests/test_read_user_dict.py::test_should_not_load_json_from_sentinel PASSED [ 79%]
tests/test_read_user_dict.py::test_read_user_dict_default_value[\n] PASSED [ 79%]
tests/test_read_user_dict.py::test_read_user_dict_default_value[\ndefault\n] PASSED [ 80%]
tests/test_read_user_dict.py::test_json_prompt_process_response PASSED   [ 80%]
tests/test_read_user_variable.py::test_click_invocation PASSED           [ 80%]
tests/test_read_user_variable.py::test_input_loop_with_null_default_value PASSED [ 80%]
tests/test_read_user_yes_no.py::test_click_invocation PASSED             [ 81%]
tests/test_read_user_yes_no.py::test_yesno_prompt_process_response PASSED [ 81%]
tests/test_repo_not_found.py::test_should_raise_error_if_repo_does_not_exist PASSED [ 81%]
tests/test_specify_output_dir.py::test_api_invocation PASSED             [ 81%]
tests/test_specify_output_dir.py::test_default_output_dir PASSED         [ 82%]
tests/test_templates.py::test_build_templates[include] PASSED            [ 82%]
tests/test_templates.py::test_build_templates[no-templates] PASSED       [ 82%]
tests/test_templates.py::test_build_templates[extends] PASSED            [ 83%]
tests/test_templates.py::test_build_templates[super] PASSED              [ 83%]
tests/test_time_extension.py::test_tz_is_required PASSED                 [ 83%]
tests/test_time_extension.py::test_utc_default_datetime_format PASSED    [ 83%]
tests/test_time_extension.py::test_accept_valid_timezones[utc] PASSED    [ 84%]
tests/test_time_extension.py::test_accept_valid_timezones[local] PASSED  [ 84%]
tests/test_time_extension.py::test_accept_valid_timezones[Europe/Berlin] PASSED [ 84%]
tests/test_time_extension.py::test_environment_datetime_format PASSED    [ 84%]
tests/test_time_extension.py::test_add_time PASSED                       [ 85%]
tests/test_time_extension.py::test_substract_time PASSED                 [ 85%]
tests/test_time_extension.py::test_offset_with_format PASSED             [ 85%]
tests/test_utils.py::test_force_delete PASSED                            [ 85%]
tests/test_utils.py::test_rmtree PASSED                                  [ 86%]
tests/test_utils.py::test_make_sure_path_exists PASSED                   [ 86%]
tests/test_utils.py::test_make_sure_path_exists_correctly_handle_os_error PASSED [ 86%]
tests/test_utils.py::test_work_in PASSED                                 [ 87%]
tests/test_utils.py::test_work_in_without_path PASSED                    [ 87%]
tests/test_utils.py::test_create_tmp_repo_dir PASSED                     [ 87%]
tests/vcs/test_clone.py::test_clone_should_raise_if_vcs_not_installed PASSED [ 87%]
tests/vcs/test_clone.py::test_clone_should_rstrip_trailing_slash_in_repo_url PASSED [ 88%]
tests/vcs/test_clone.py::test_clone_should_abort_if_user_does_not_want_to_reclone PASSED [ 88%]
tests/vcs/test_clone.py::test_clone_should_silent_exit_if_ok_to_reuse PASSED [ 88%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[git-https://github.com/hello/world.git-world] PASSED [ 88%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[hg-https://bitbucket.org/foo/bar-bar] PASSED [ 89%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[git-git@host:gitoliterepo-gitoliterepo] PASSED [ 89%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[git-git@gitlab.com:cookiecutter/cookiecutter.git-cookiecutter] PASSED [ 89%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[git-git@github.com:cookiecutter/cookiecutter.git-cookiecutter] PASSED [ 90%]
tests/vcs/test_clone.py::test_clone_handles_repo_typo[fatal: repository 'https://github.com/hackebro/cookiedozer' not found] PASSED [ 90%]
tests/vcs/test_clone.py::test_clone_handles_repo_typo[hg: abort: HTTP Error 404: Not Found] PASSED [ 90%]
tests/vcs/test_clone.py::test_clone_handles_branch_typo[error: pathspec 'unknown_branch' did not match any file(s) known to git] PASSED [ 90%]
tests/vcs/test_clone.py::test_clone_handles_branch_typo[hg: abort: unknown revision 'unknown_branch'!] PASSED [ 91%]
tests/vcs/test_clone.py::test_clone_unknown_subprocess_error PASSED      [ 91%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[git+https://github.com/pytest-dev/cookiecutter-pytest-plugin.git-git-https://github.com/pytest-dev/cookiecutter-pytest-plugin.git] PASSED [ 91%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[hg+https://bitbucket.org/foo/bar.hg-hg-https://bitbucket.org/foo/bar.hg] PASSED [ 91%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://github.com/pytest-dev/cookiecutter-pytest-plugin.git-git-https://github.com/pytest-dev/cookiecutter-pytest-plugin.git] PASSED [ 92%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://bitbucket.org/foo/bar.hg-hg-https://bitbucket.org/foo/bar.hg] PASSED [ 92%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://github.com/audreyfeldroy/cookiecutter-pypackage.git-git-https://github.com/audreyfeldroy/cookiecutter-pypackage.git] PASSED [ 92%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://github.com/audreyfeldroy/cookiecutter-pypackage-git-https://github.com/audreyfeldroy/cookiecutter-pypackage] PASSED [ 92%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[git@gitorious.org:cookiecutter-gitorious/cookiecutter-gitorious.git-git-git@gitorious.org:cookiecutter-gitorious/cookiecutter-gitorious.git] PASSED [ 93%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://audreyr@bitbucket.org/audreyr/cookiecutter-bitbucket-hg-https://audreyr@bitbucket.org/audreyr/cookiecutter-bitbucket] PASSED [ 93%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[foo+git] PASSED [ 93%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[foo+hg] PASSED [ 94%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[foo+bar] PASSED [ 94%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[foobar] PASSED [ 94%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[http://norepotypespecified.com] PASSED [ 94%]
tests/vcs/test_is_vcs_installed.py::test_is_vcs_installed[-False] PASSED [ 95%]
tests/vcs/test_is_vcs_installed.py::test_is_vcs_installed[None-False] PASSED [ 95%]
tests/vcs/test_is_vcs_installed.py::test_is_vcs_installed[False-False] PASSED [ 95%]
tests/vcs/test_is_vcs_installed.py::test_is_vcs_installed[/usr/local/bin/git-True] PASSED [ 95%]
tests/zipfile/test_unzip.py::test_unzip_local_file PASSED                [ 96%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_environment_password PASSED [ 96%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_bad_environment_password PASSED [ 96%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_user_password_with_noinput PASSED [ 97%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_user_password PASSED [ 97%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_user_bad_password PASSED [ 97%]
tests/zipfile/test_unzip.py::test_empty_zip_file PASSED                  [ 97%]
tests/zipfile/test_unzip.py::test_non_repo_zip_file PASSED               [ 98%]
tests/zipfile/test_unzip.py::test_bad_zip_file PASSED                    [ 98%]
tests/zipfile/test_unzip.py::test_unzip_url PASSED                       [ 98%]
tests/zipfile/test_unzip.py::test_unzip_url_with_empty_chunks PASSED     [ 98%]
tests/zipfile/test_unzip.py::test_unzip_url_existing_cache PASSED        [ 99%]
tests/zipfile/test_unzip.py::test_unzip_url_existing_cache_no_input PASSED [ 99%]
tests/zipfile/test_unzip.py::test_unzip_should_abort_if_no_redownload PASSED [ 99%]
tests/zipfile/test_unzip.py::test_unzip_is_ok_to_reuse PASSED            [100%]

=================================== FAILURES ===================================
___________________________ test_should_invoke_main ____________________________

monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7ef1408610c0>
project_dir = 'fake-project-templated'

    @pytest.mark.usefixtures('clean_system')
    def test_should_invoke_main(monkeypatch, project_dir):
        """Should create a project and exit with 0 code on cli invocation."""
        monkeypatch.setenv('PYTHONPATH', '.')
    
>       exit_code = subprocess.check_call(
            [sys.executable, '-m', 'cookiecutter.cli', 'tests/fake-repo-tmpl', '--no-input']
        )

tests/test_cookiecutter_invocation.py:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

popenargs = (['/usr/bin/python', '-m', 'cookiecutter.cli', 'tests/fake-repo-tmpl', '--no-input'],)
kwargs = {}, retcode = 1
cmd = ['/usr/bin/python', '-m', 'cookiecutter.cli', 'tests/fake-repo-tmpl', '--no-input']

    def check_call(*popenargs, **kwargs):
        """Run command with arguments.  Wait for command to complete.  If
        the exit code was zero then return, otherwise raise
        CalledProcessError.  The CalledProcessError object will have the
        return code in the returncode attribute.
    
        The arguments are the same as for the call function.  Example:
    
        check_call(["ls", "-l"])
        """
        retcode = call(*popenargs, **kwargs)
        if retcode:
            cmd = kwargs.get("args")
            if cmd is None:
                cmd = popenargs[0]
>           raise CalledProcessError(retcode, cmd)
E           subprocess.CalledProcessError: Command '['/usr/bin/python', '-m', 'cookiecutter.cli', 'tests/fake-repo-tmpl', '--no-input']' returned non-zero exit status 1.

/usr/lib/python3.10/subprocess.py:369: CalledProcessError
----------------------------- Captured stderr call -----------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/workspace/cookiecutter/cookiecutter/cli.py", line 6, in <module>
    import click
ModuleNotFoundError: No module named 'click'
--------------------------------- JSON report ----------------------------------
report saved to: report.json
================================ tests coverage ================================
_______________ coverage: platform linux, python 3.10.12-final-0 _______________

Name                          Stmts   Miss  Cover   Missing
-----------------------------------------------------------
cookiecutter/__init__.py          6      0   100%
cookiecutter/__main__.py          1      0   100%
cookiecutter/cli.py              75      1    99%   127
cookiecutter/config.py           48      0   100%
cookiecutter/environment.py      16      0   100%
cookiecutter/exceptions.py       23      0   100%
cookiecutter/extensions.py       65      0   100%
cookiecutter/find.py             17      0   100%
cookiecutter/generate.py        186     10    95%   35-36, 123-124, 180-181, 187, 284-285, 302
cookiecutter/hooks.py            75      0   100%
cookiecutter/log.py              19      0   100%
cookiecutter/main.py             65      0   100%
cookiecutter/prompt.py          161      2    99%   95, 175
cookiecutter/replay.py           28      0   100%
cookiecutter/repository.py       42      2    95%   80, 90
cookiecutter/utils.py            47      2    96%   59-60
cookiecutter/vcs.py              53      0   100%
cookiecutter/zipfile.py          50      0   100%
-----------------------------------------------------------
TOTAL                           977     17    98%
=========================== short test summary info ============================
FAILED tests/test_cookiecutter_invocation.py::test_should_invoke_main - subprocess.CalledProcessError: Command '['/usr/bin/python', '-m', 'cookiecutter.cli', 'tests/fake-repo-tmpl', '--no-input']' returned non-zero exit status 1.
=================== 1 failed, 366 passed, 4 skipped in 2.70s ===================