From 6096b676799c121ab6b692bf1c52dfd82f40b255 Mon Sep 17 00:00:00 2001 From: Sina Atalay Date: Sun, 28 Apr 2024 23:21:59 +0300 Subject: [PATCH] tests: add new tests --- tests/test_cli.py | 242 +++++++++++++++++++++++++++++++++++++++-- tests/test_renderer.py | 11 ++ 2 files changed, 246 insertions(+), 7 deletions(-) diff --git a/tests/test_cli.py b/tests/test_cli.py index 5e4720b..9c1b07a 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1,3 +1,4 @@ +import copy import os import shutil @@ -169,33 +170,260 @@ def test_live_progress_reporter_class(): progress.finish_the_current_step() +@pytest.mark.parametrize( + "folder_name", + ["markdown"] + dm.available_themes, +) +def test_copy_templates(tmp_path, folder_name): + copied_path = cli.copy_templates( + folder_name=folder_name, + copy_to=tmp_path, + ) + assert copied_path.exists() + + runner = typer.testing.CliRunner() -@time_machine.travel("2024-01-01") def test_render_command(tmp_path, input_file_path): # copy input file to the temporary directory to create the output directory there: input_file_path = shutil.copy(input_file_path, tmp_path) result = runner.invoke(cli.app, ["render", str(input_file_path)]) - assert result.exit_code == 0 + output_folder_path = tmp_path / "rendercv_output" + pdf_file_path = output_folder_path / "John_Doe_CV.pdf" + latex_file_path = output_folder_path / "John_Doe_CV.tex" + markdown_file_path = output_folder_path / "John_Doe_CV.md" + html_file_path = output_folder_path / "John_Doe_CV_PASTETOGRAMMARLY.html" + png_file_path = output_folder_path / "John_Doe_CV_1.png" + + assert output_folder_path.exists() + assert pdf_file_path.exists() + assert latex_file_path.exists() + assert markdown_file_path.exists() + assert html_file_path.exists() + assert png_file_path.exists() assert "Your CV is rendered!" in result.stdout -def test_render_command_with_use_local_latex_option(tmp_path, input_file_path): +def test_render_command_with_different_output_path(tmp_path, input_file_path): # copy input file to the temporary directory to create the output directory there: input_file_path = shutil.copy(input_file_path, tmp_path) + output_folder_path = tmp_path / "test" + + result = runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--output-folder-name", + "test", + ], + ) + + assert result.exit_code == 0 + assert output_folder_path.exists() + assert "Your CV is rendered!" in result.stdout + + +def test_render_command_with_custom_latex_path(tmp_path, input_file_path): + # copy input file to the temporary directory to create the output directory there: + input_file_path = shutil.copy(input_file_path, tmp_path) + + latex_file_path = tmp_path / "test.tex" + runner.invoke( cli.app, - ["render", str(input_file_path), "--use-local-latex-command", "pdflatex"], + [ + "render", + str(input_file_path), + "--latex-path", + str(latex_file_path), + ], ) + assert latex_file_path.exists() + + +def test_render_command_with_custom_pdf_path(tmp_path, input_file_path): + # copy input file to the temporary directory to create the output directory there: + input_file_path = shutil.copy(input_file_path, tmp_path) + + pdf_file_path = tmp_path / "test.pdf" + + runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--pdf-path", + str(pdf_file_path), + ], + ) + + assert pdf_file_path.exists() + + +def test_render_command_with_custom_markdown_path(tmp_path, input_file_path): + # copy input file to the temporary directory to create the output directory there: + input_file_path = shutil.copy(input_file_path, tmp_path) + + markdown_file_path = tmp_path / "test.md" + + runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--markdown-path", + str(markdown_file_path), + ], + ) + + assert markdown_file_path.exists() + + +def test_render_command_with_custom_html_path(tmp_path, input_file_path): + # copy input file to the temporary directory to create the output directory there: + input_file_path = shutil.copy(input_file_path, tmp_path) + + html_file_path = tmp_path / "test.html" + + runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--html-path", + str(html_file_path), + ], + ) + + assert html_file_path.exists() + + +def test_render_command_with_custom_png_path(tmp_path, input_file_path): + # copy input file to the temporary directory to create the output directory there: + input_file_path = shutil.copy(input_file_path, tmp_path) + + png_file_path = tmp_path / "test.png" + + runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--png-path", + str(png_file_path), + ], + ) + + assert png_file_path.exists() + + +def test_render_command_with_custom_png_path_multiple_pages(tmp_path): + # create a new input file (for a CV with multiple pages) in the temporary directory: + os.chdir(tmp_path) + runner.invoke(cli.app, ["new", "John Doe"]) + input_file_path = tmp_path / "John_Doe_CV.yaml" + + png_file_path = tmp_path / "test.png" + runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--png-path", + str(png_file_path), + ], + ) + + png_page1_file_path = tmp_path / "test_1.png" + png_page2_file_path = tmp_path / "test_2.png" + + assert png_page1_file_path.exists() + assert png_page2_file_path.exists() + + +def test_render_command_with_dont_generate_markdown(tmp_path, input_file_path): + # copy input file to the temporary directory to create the output directory there: + input_file_path = shutil.copy(input_file_path, tmp_path) + markdown_file_path = tmp_path / "rendercv_output" / "John_Doe_CV.md" + runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--dont-generate-markdown", + ], + ) + + assert not markdown_file_path.exists() + + +def test_render_command_with_dont_generate_html(tmp_path, input_file_path): + # copy input file to the temporary directory to create the output directory there: + input_file_path = shutil.copy(input_file_path, tmp_path) + html_file_path = tmp_path / "rendercv_output" / "John_Doe_CV_PASTETOGRAMMARLY.html" + runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--dont-generate-html", + ], + ) + + assert not html_file_path.exists() + + +def test_render_command_with_dont_generate_png(tmp_path, input_file_path): + # copy input file to the temporary directory to create the output directory there: + input_file_path = shutil.copy(input_file_path, tmp_path) + png_file_path = tmp_path / "rendercv_output" / "John_Doe_CV_1.png" + runner.invoke( + cli.app, + [ + "render", + str(input_file_path), + "--dont-generate-png", + ], + ) + + assert not png_file_path.exists() + def test_new_command(tmp_path): # change the current working directory to the temporary directory: os.chdir(tmp_path) - result = runner.invoke(cli.app, ["new", "John Doe"]) - assert result.exit_code == 0 - assert "Your RenderCV input file has been created" in result.stdout + runner.invoke(cli.app, ["new", "John Doe"]) + + markdown_source_files_path = tmp_path / "markdown" + theme_source_files_path = tmp_path / "classic" + input_file_path = tmp_path / "John_Doe_CV.yaml" + + assert markdown_source_files_path.exists() + assert theme_source_files_path.exists() + assert input_file_path.exists() + + +def test_new_command_with_dont_create_theme_source_files(tmp_path): + # change the current working directory to the temporary directory: + os.chdir(tmp_path) + runner.invoke(cli.app, ["new", "John Doe", "--dont-create-theme-source-files"]) + + theme_source_files_path = tmp_path / "classic" + + assert not theme_source_files_path.exists() + + +def test_new_command_with_dont_create_markdown_source_files(tmp_path): + # change the current working directory to the temporary directory: + os.chdir(tmp_path) + runner.invoke(cli.app, ["new", "John Doe", "--dont-create-markdown-source-files"]) + + markdown_source_files_path = tmp_path / "markdown" + + assert not markdown_source_files_path.exists() diff --git a/tests/test_renderer.py b/tests/test_renderer.py index a0b3d72..44fa9b9 100644 --- a/tests/test_renderer.py +++ b/tests/test_renderer.py @@ -380,6 +380,17 @@ def test_generate_markdown_file( ) +def test_if_generate_markdown_file_can_create_a_new_directory( + tmp_path, rendercv_data_model +): + new_directory = tmp_path / "new_directory" + new_directory.mkdir() + + latex_file_path = r.generate_markdown_file(rendercv_data_model, new_directory) + + assert latex_file_path.exists() + + @pytest.mark.parametrize( "theme_name", dm.available_themes,