From f8a8809ff0bcecbf17213adb0c2b76264f2fff92 Mon Sep 17 00:00:00 2001 From: Sina Atalay Date: Sat, 7 Sep 2024 18:47:02 -0400 Subject: [PATCH] tests: test `rendercv_settings` --- tests/test_cli.py | 133 ++++++++++++++++++++++++++++++++++++++++++++- tests/test_data.py | 49 +++++++++++++++++ 2 files changed, 181 insertions(+), 1 deletion(-) diff --git a/tests/test_cli.py b/tests/test_cli.py index 9079ac8a..a710f1ad 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -14,6 +14,8 @@ import rendercv.cli as cli import rendercv.cli.printer as printer import rendercv.cli.utilities as utilities import rendercv.data as data +import rendercv.data.generator as generator +import rendercv.data.reader as reader from rendercv import __version__ @@ -750,7 +752,7 @@ def test_set_or_update_a_value(rendercv_data_model, key, value): value = eval(value) if key == "cv.sections": - assert "test_title" in updated_model.cv.sections_input + assert "test_title" in updated_model.cv.sections_input # type: ignore else: assert eval(f"updated_model.{key}") == value @@ -791,3 +793,132 @@ def test_relative_input_file_path_with_custom_output_paths(tmp_path, input_file_ ) assert (tmp_path / "test.pdf").exists() + + +def test_render_command_with_input_file_settings(tmp_path, input_file_path): + # change the current working directory to the temporary directory: + os.chdir(tmp_path) + + # read the input file as a dictionary: + input_dictionary = reader.read_a_yaml_file(input_file_path) + + # append rendercv_settings: + input_dictionary["rendercv_settings"] = { + "render_command": { + "pdf_path": "test.pdf", + "latex_path": "test.tex", + "markdown_path": "test.md", + "html_path": "test.html", + "png_path": "test.png", + } + } + + # write the input dictionary to a new input file: + new_input_file_path = tmp_path / "new_input_file.yaml" + yaml_content = generator.dictionary_to_yaml(input_dictionary) + new_input_file_path.write_text(yaml_content, encoding="utf-8") + + result = runner.invoke( + cli.app, + [ + "render", + str(new_input_file_path.relative_to(tmp_path)), + ], + ) + + print(result.stdout) + + assert (tmp_path / "test.pdf").exists() + assert (tmp_path / "test.tex").exists() + assert (tmp_path / "test.md").exists() + assert (tmp_path / "test.html").exists() + assert (tmp_path / "test.png").exists() + assert "Your CV is rendered!" in result.stdout + + +def test_render_command_with_input_file_settings_2(tmp_path, input_file_path): + # change the current working directory to the temporary directory: + os.chdir(tmp_path) + + # read the input file as a dictionary: + input_dictionary = reader.read_a_yaml_file(input_file_path) + + # append rendercv_settings: + input_dictionary["rendercv_settings"] = { + "render_command": { + "dont_generate_html": True, + "dont_generate_markdown": True, + "dont_generate_png": True, + } + } + + # write the input dictionary to a new input file: + new_input_file_path = tmp_path / "new_input_file.yaml" + yaml_content = generator.dictionary_to_yaml(input_dictionary) + new_input_file_path.write_text(yaml_content, encoding="utf-8") + + result = runner.invoke( + cli.app, + [ + "render", + str(new_input_file_path.relative_to(tmp_path)), + ], + ) + + print(result.stdout) + + assert (tmp_path / "rendercv_output" / "John_Doe_CV.pdf").exists() + assert not (tmp_path / "rendercv_output" / "John_Doe_CV.md").exists() + assert not (tmp_path / "rendercv_output" / "John_Doe_CV.html").exists() + assert not (tmp_path / "rendercv_output" / "John_Doe_CV_1.png").exists() + + +@pytest.mark.parametrize( + ("option", "new_value"), + [ + ("pdf-path", "override.pdf"), + ("latex-path", "override.tex"), + ("markdown-path", "override.md"), + ("html-path", "override.html"), + ("png-path", "override.png"), + ], +) +def test_render_command_overriding_input_file_settings( + tmp_path, input_file_path, option, new_value +): + # change the current working directory to the temporary directory: + os.chdir(tmp_path) + + # read the input file as a dictionary:s + input_dictionary = reader.read_a_yaml_file(input_file_path) + + # append rendercv_settings: + input_dictionary["rendercv_settings"] = { + "render_command": { + "pdf_path": "test.pdf", + "latex_path": "test.tex", + "markdown_path": "test.md", + "html_path": "test.html", + "png_path": "test.png", + } + } + + # write the input dictionary to a new input file: + new_input_file_path = tmp_path / "new_input_file.yaml" + yaml_content = generator.dictionary_to_yaml(input_dictionary) + new_input_file_path.write_text(yaml_content, encoding="utf-8") + + result = runner.invoke( + cli.app, + [ + "render", + str(new_input_file_path.relative_to(tmp_path)), + f"--{option}", + new_value, + ], + ) + + print(result.stdout) + + assert (tmp_path / new_value).exists() + assert "Your CV is rendered!" in result.stdout diff --git a/tests/test_data.py b/tests/test_data.py index 5f7e0454..b94498c9 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -722,6 +722,22 @@ def test_if_local_catalog_resets(): assert locale_catalog.locale_catalog["month"] == "month" +def test_curriculum_vitae(): + data.CurriculumVitae(name="Test Doe") + + assert curriculum_vitae.curriculum_vitae == {"name": "Test Doe"} + + +def test_if_curriculum_vitae_resets(): + data.CurriculumVitae(name="Test Doe") + + assert curriculum_vitae.curriculum_vitae["name"] == "Test Doe" + + data.create_a_sample_data_model("John Doe") + + assert curriculum_vitae.curriculum_vitae["name"] == "John Doe" + + def test_dictionary_to_yaml(): input_dictionary = { "test_list": [ @@ -791,3 +807,36 @@ def test_make_a_url_clean(url, expected_clean_url): data.PublicationEntry(title="Test", authors=["test"], url=url).clean_url == expected_clean_url ) + + +@pytest.mark.parametrize( + "path_name, expected_value", + [ + ("NAME_IN_SNAKE_CASE", "John_Doe"), + ("NAME_IN_LOWER_SNAKE_CASE", "john_doe"), + ("NAME_IN_UPPER_SNAKE_CASE", "JOHN_DOE"), + ("NAME_IN_KEBAB_CASE", "John-Doe"), + ("NAME_IN_LOWER_KEBAB_CASE", "john-doe"), + ("NAME_IN_UPPER_KEBAB_CASE", "JOHN-DOE"), + ("NAME", "John Doe"), + ("FULL_MONTH_NAME", "January"), + ("MONTH_ABBREVIATION", "Jan"), + ("MONTH", "1"), + ("MONTH_IN_TWO_DIGITS", "01"), + ("YEAR", "2024"), + ("YEAR_IN_TWO_DIGITS", "24"), + ], +) +@time_machine.travel("2024-01-01") +def test_render_command_settings_placeholders(path_name, expected_value): + data.CurriculumVitae(name="John Doe") + + render_command_settings = data.RenderCommandSettings( + pdf_path=path_name, + latex_path=path_name, + html_path=path_name, + markdown_path=path_name, + output_folder_name=path_name, + ) + + assert render_command_settings.pdf_path.name == expected_value # type: ignore