mirror of https://github.com/eyhc1/rendercv.git
199 lines
5.2 KiB
Python
199 lines
5.2 KiB
Python
import os
|
|
import shutil
|
|
|
|
import rendercv.cli as cli
|
|
import rendercv.data_models as dm
|
|
|
|
import pydantic
|
|
import ruamel.yaml
|
|
import pytest
|
|
import typer.testing
|
|
import time_machine
|
|
|
|
|
|
def test_welcome():
|
|
cli.welcome()
|
|
|
|
|
|
def test_warning():
|
|
cli.warning("This is a warning message.")
|
|
|
|
|
|
def test_error():
|
|
cli.error("This is an error message.")
|
|
|
|
|
|
def test_information():
|
|
cli.information("This is an information message.")
|
|
|
|
|
|
def test_get_error_message_and_location_and_value_from_a_custom_error():
|
|
error_string = "('error message', 'location', 'value')"
|
|
result = cli.get_error_message_and_location_and_value_from_a_custom_error(
|
|
error_string
|
|
)
|
|
assert result == ("error message", "location", "value")
|
|
|
|
error_string = """("er'ror message", 'location', 'value')"""
|
|
result = cli.get_error_message_and_location_and_value_from_a_custom_error(
|
|
error_string
|
|
)
|
|
assert result == ("er'ror message", "location", "value")
|
|
|
|
error_string = "error message"
|
|
result = cli.get_error_message_and_location_and_value_from_a_custom_error(
|
|
error_string
|
|
)
|
|
assert result == (None, None, None)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"data_model_class, invalid_model",
|
|
[
|
|
(
|
|
dm.EducationEntry,
|
|
{
|
|
"institution": "Boğaziçi University",
|
|
"area": "Mechanical Engineering",
|
|
"degree": "BS",
|
|
"date": "2028-12-08",
|
|
},
|
|
),
|
|
(
|
|
dm.EducationEntry,
|
|
{
|
|
"area": "Mechanical Engineering",
|
|
"extra": "Extra",
|
|
},
|
|
),
|
|
(
|
|
dm.ExperienceEntry,
|
|
{
|
|
"company": "CERN",
|
|
},
|
|
),
|
|
(
|
|
dm.ExperienceEntry,
|
|
{
|
|
"position": "Researcher",
|
|
},
|
|
),
|
|
(
|
|
dm.ExperienceEntry,
|
|
{
|
|
"company": "CERN",
|
|
"position": "Researcher",
|
|
"stat_date": "2023-12-08",
|
|
"end_date": "INVALID END DATE",
|
|
},
|
|
),
|
|
(
|
|
dm.PublicationEntry,
|
|
{
|
|
"doi": "10.1109/TASC.2023.3340648",
|
|
},
|
|
),
|
|
(
|
|
dm.ExperienceEntry,
|
|
{
|
|
"authors": ["John Doe", "Jane Doe"],
|
|
},
|
|
),
|
|
(
|
|
dm.OneLineEntry,
|
|
{
|
|
"name": "My One Line Entry",
|
|
},
|
|
),
|
|
(
|
|
dm.NormalEntry,
|
|
{
|
|
"name": "My Entry",
|
|
},
|
|
),
|
|
(
|
|
dm.CurriculumVitae,
|
|
{
|
|
"name": "John Doe",
|
|
"sections": {
|
|
"education": [
|
|
{
|
|
"institution": "Boğaziçi University",
|
|
"area": "Mechanical Engineering",
|
|
"degree": "BS",
|
|
"date": "2028-12-08",
|
|
},
|
|
{
|
|
"degree": "BS",
|
|
},
|
|
]
|
|
},
|
|
},
|
|
),
|
|
],
|
|
)
|
|
def test_handle_validation_error(data_model_class, invalid_model):
|
|
try:
|
|
data_model_class(**invalid_model)
|
|
except pydantic.ValidationError as e:
|
|
cli.handle_validation_error(e)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"exception",
|
|
[
|
|
ruamel.yaml.YAMLError("message"),
|
|
RuntimeError("message"),
|
|
FileNotFoundError("message"),
|
|
ValueError("message"),
|
|
UnicodeDecodeError("utf-8", b"", 1, 2, "message"),
|
|
],
|
|
)
|
|
def test_handle_exceptions(exception):
|
|
@cli.handle_exceptions
|
|
def function_that_raises_exception():
|
|
raise exception
|
|
|
|
function_that_raises_exception()
|
|
|
|
|
|
def test_live_progress_reporter_class():
|
|
with cli.LiveProgressReporter(number_of_steps=3) as progress:
|
|
progress.start_a_step("Test step 1")
|
|
progress.finish_the_current_step()
|
|
|
|
progress.start_a_step("Test step 2")
|
|
progress.finish_the_current_step()
|
|
|
|
progress.start_a_step("Test step 3")
|
|
progress.finish_the_current_step()
|
|
|
|
|
|
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
|
|
assert "Your CV is rendered!" in result.stdout
|
|
|
|
|
|
def test_render_command_with_use_local_latex_option(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)
|
|
|
|
runner.invoke(cli.app, ["render", str(input_file_path), "--use-local-latex"])
|
|
|
|
|
|
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
|