@@ -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\n B=world\n " , "A=A\n B=B\n " ),
705+ # Key with no value
706+ ("A\n " , "A\n " ),
707+ # Comments and blank lines preserved
708+ ("# a comment\n A=b\n \n B=c\n " , "# a comment\n A=A\n \n B=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\n B=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\n B=secret # ::dotenv-template-exclude\n C=val\n '
748+ )
749+
750+ result = dotenv .generate_template (stream = stream , keep_directives = True )
751+
752+ assert result == 'A="example" # ::dotenv-template-preserve\n C=C\n '
753+
754+
755+ def test_generate_template_file (dotenv_path ):
756+ dotenv_path .write_text ("A=hello\n B=world\n " )
757+
758+ result = dotenv .generate_template (dotenv_path = dotenv_path )
759+
760+ assert result == "A=A\n B=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