Skip to content

Commit 1daa9a4

Browse files
committed
test: add tests for generate_template
Cover core value replacement, directives, keep_directives flag, file path input, and CLI subcommand
1 parent 5bc1b26 commit 1daa9a4

File tree

2 files changed

+112
-0
lines changed

2 files changed

+112
-0
lines changed

tests/test_cli.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,3 +293,44 @@ def test_run_with_dotenv_and_command_flags(dotenv_path, tmp_path):
293293

294294
check_process(result, exit_code=0)
295295
assert result.stdout.strip().startswith("dotenv, version")
296+
297+
298+
def test_template_stdout(cli, dotenv_path):
299+
dotenv_path.write_text("A=hello\nB=world\n")
300+
301+
result = cli.invoke(dotenv_cli, ["--file", dotenv_path, "template"])
302+
303+
assert (result.exit_code, result.output) == (0, "A=A\nB=B\n")
304+
305+
306+
def test_template_to_file(cli, dotenv_path, tmp_path):
307+
dotenv_path.write_text("A=hello\nB=world\n")
308+
output_path = tmp_path / ".env.template"
309+
310+
result = cli.invoke(
311+
dotenv_cli, ["--file", dotenv_path, "template", str(output_path)]
312+
)
313+
314+
assert result.exit_code == 0
315+
assert output_path.read_text() == "A=A\nB=B\n"
316+
assert "Template written to" in result.output
317+
318+
319+
def test_template_keep_directives(cli, dotenv_path):
320+
dotenv_path.write_text('A="example" # ::dotenv-template-preserve\nB=val\n')
321+
322+
result = cli.invoke(
323+
dotenv_cli, ["--file", dotenv_path, "template", "--keep-directives"]
324+
)
325+
326+
assert (result.exit_code, result.output) == (
327+
0,
328+
'A="example" # ::dotenv-template-preserve\nB=B\n',
329+
)
330+
331+
332+
def test_template_non_existent_file(cli):
333+
result = cli.invoke(dotenv_cli, ["--file", "nx_file", "template"])
334+
335+
assert result.exit_code == 2
336+
assert "Error opening env file" in result.output

tests/test_main.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,3 +695,74 @@ def test_dotenv_values_file_stream(dotenv_path):
695695
result = dotenv.dotenv_values(stream=f)
696696

697697
assert result == {"a": "b"}
698+
699+
700+
@pytest.mark.parametrize(
701+
"input_text,expected",
702+
[
703+
# Basic value replacement
704+
("A=hello\nB=world\n", "A=A\nB=B\n"),
705+
# Key with no value
706+
("A\n", "A\n"),
707+
# Comments and blank lines preserved
708+
("# a comment\nA=b\n\nB=c\n", "# a comment\nA=A\n\nB=B\n"),
709+
# Export prefix preserved
710+
("export A=b\n", "export A=A\n"),
711+
],
712+
)
713+
def test_generate_template_basic(input_text, expected):
714+
stream = io.StringIO(input_text)
715+
716+
result = dotenv.generate_template(stream=stream)
717+
718+
assert result == expected
719+
720+
721+
def test_generate_template_exclude():
722+
stream = io.StringIO("A=secret # ::dotenv-template-exclude\nB=ok\n")
723+
724+
result = dotenv.generate_template(stream=stream)
725+
726+
assert result == "B=B\n"
727+
728+
729+
def test_generate_template_preserve_strips_directive():
730+
stream = io.StringIO('A="example" # ::dotenv-template-preserve\n')
731+
732+
result = dotenv.generate_template(stream=stream)
733+
734+
assert result == 'A="example"\n'
735+
736+
737+
def test_generate_template_preserve_with_comment():
738+
stream = io.StringIO('A="example" # useful hint ::dotenv-template-preserve\n')
739+
740+
result = dotenv.generate_template(stream=stream)
741+
742+
assert result == 'A="example" # useful hint\n'
743+
744+
745+
def test_generate_template_keep_directives():
746+
stream = io.StringIO(
747+
'A="example" # ::dotenv-template-preserve\nB=secret # ::dotenv-template-exclude\nC=val\n'
748+
)
749+
750+
result = dotenv.generate_template(stream=stream, keep_directives=True)
751+
752+
assert result == 'A="example" # ::dotenv-template-preserve\nC=C\n'
753+
754+
755+
def test_generate_template_file(dotenv_path):
756+
dotenv_path.write_text("A=hello\nB=world\n")
757+
758+
result = dotenv.generate_template(dotenv_path=dotenv_path)
759+
760+
assert result == "A=A\nB=B\n"
761+
762+
763+
def test_generate_template_empty():
764+
stream = io.StringIO("")
765+
766+
result = dotenv.generate_template(stream=stream)
767+
768+
assert result == ""

0 commit comments

Comments
 (0)