mirror of
https://github.com/rendercv/rendercv.git
synced 2026-02-06 03:22:01 -05:00
106 lines
3.7 KiB
Python
106 lines
3.7 KiB
Python
import contextlib
|
|
import os
|
|
|
|
import pytest
|
|
import typer
|
|
|
|
from rendercv.cli.new_command.new_command import cli_command_new
|
|
from rendercv.schema.rendercv_model_builder import build_rendercv_dictionary_and_model
|
|
|
|
|
|
class TestCliCommandNew:
|
|
@pytest.mark.parametrize("create_typst_templates", [True, False])
|
|
@pytest.mark.parametrize("create_markdown_templates", [True, False])
|
|
@pytest.mark.parametrize("input_file_exists", [True, False])
|
|
@pytest.mark.parametrize("typst_templates_exist", [True, False])
|
|
@pytest.mark.parametrize("markdown_templates_exist", [True, False])
|
|
def test_cli_command_new(
|
|
self,
|
|
tmp_path,
|
|
create_typst_templates,
|
|
create_markdown_templates,
|
|
input_file_exists,
|
|
typst_templates_exist,
|
|
markdown_templates_exist,
|
|
):
|
|
os.chdir(tmp_path)
|
|
|
|
full_name = "John Doe"
|
|
input_file_path = tmp_path / "John_Doe_CV.yaml"
|
|
typst_folder = tmp_path / "classic"
|
|
markdown_folder = tmp_path / "markdown"
|
|
|
|
# Set up pre-existing files/folders
|
|
if input_file_exists:
|
|
input_file_path.write_text("existing content", encoding="utf-8")
|
|
if typst_templates_exist:
|
|
typst_folder.mkdir()
|
|
if markdown_templates_exist:
|
|
markdown_folder.mkdir()
|
|
|
|
cli_command_new(
|
|
full_name=full_name,
|
|
create_typst_templates=create_typst_templates,
|
|
create_markdown_templates=create_markdown_templates,
|
|
)
|
|
|
|
# Input file should always exist after command
|
|
assert input_file_path.exists()
|
|
|
|
# If input file existed before, content should be unchanged
|
|
if input_file_exists:
|
|
assert input_file_path.read_text(encoding="utf-8") == "existing content"
|
|
else:
|
|
# Make sure it's a valid YAML file
|
|
build_rendercv_dictionary_and_model(input_file_path)
|
|
|
|
# Typst templates
|
|
if not create_typst_templates:
|
|
# Should not be created (unless already existed)
|
|
if not typst_templates_exist:
|
|
assert not typst_folder.exists()
|
|
else:
|
|
# Should exist (created or already existed)
|
|
assert typst_folder.exists()
|
|
if typst_templates_exist:
|
|
assert not (typst_folder / "Header.j2.typ").exists()
|
|
else:
|
|
assert (typst_folder / "Header.j2.typ").exists()
|
|
|
|
# Markdown templates
|
|
if not create_markdown_templates:
|
|
# Should not be created (unless already existed)
|
|
if not markdown_templates_exist:
|
|
assert not markdown_folder.exists()
|
|
else:
|
|
# Should exist (created or already existed)
|
|
assert markdown_folder.exists()
|
|
if markdown_templates_exist:
|
|
assert not (markdown_folder / "Header.j2.md").exists()
|
|
else:
|
|
assert (markdown_folder / "Header.j2.md").exists()
|
|
|
|
def test_errors_for_invalid_theme(self, capsys):
|
|
with contextlib.suppress(typer.Exit):
|
|
cli_command_new(
|
|
full_name="John Doe",
|
|
theme="invalid_theme",
|
|
create_typst_templates=False,
|
|
create_markdown_templates=False,
|
|
)
|
|
|
|
captured = capsys.readouterr()
|
|
assert "Available themes are:" in captured.out
|
|
|
|
def test_errors_for_invalid_locale(self, capsys):
|
|
with contextlib.suppress(typer.Exit):
|
|
cli_command_new(
|
|
full_name="John Doe",
|
|
locale="invalid_locale",
|
|
create_typst_templates=False,
|
|
create_markdown_templates=False,
|
|
)
|
|
|
|
captured = capsys.readouterr()
|
|
assert "Available locales are:" in captured.out
|