Coverage for tests/test_core.py: 100%

84 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2023-07-01 17:15 +0000

1import tempfile 

2 

3import pytest 

4 

5from dotenv_cli import core 

6 

7 

8def test_full() -> None: 

9 TEST = r""" 

10BASIC=basic basic 

11export EXPORT=foo 

12EMPTY= 

13INNER_QUOTES=this 'is' a test 

14INNER_QUOTES2=this "is" a test 

15TRIM_WHITESPACE= foo 

16KEEP_WHITESPACE=" foo " 

17MULTILINE_DQ="multi\nline" 

18MULTILINE_SQ='multi\nline' 

19MULTILINE_NQ=multi\nline 

20# some comment 

21should be ignored 

22""" 

23 

24 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

25 f.write(TEST) 

26 

27 env = core.read_dotenv(f.name) 

28 assert env["BASIC"] == "basic basic" 

29 assert env["EXPORT"] == "foo" 

30 assert env["EMPTY"] == "" 

31 assert env["INNER_QUOTES"] == "this 'is' a test" 

32 assert env["INNER_QUOTES2"] == 'this "is" a test' 

33 assert env["TRIM_WHITESPACE"] == "foo" 

34 assert env["KEEP_WHITESPACE"] == " foo " 

35 assert env["MULTILINE_DQ"] == "multi\nline" 

36 assert env["MULTILINE_SQ"] == "multi\\nline" 

37 assert env["MULTILINE_NQ"] == "multi\\nline" 

38 

39 assert len(env) == 10 

40 

41 

42def test_basic() -> None: 

43 """Basic unquoted strings""" 

44 TEST = "FOO=BAR" 

45 

46 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

47 f.write(TEST) 

48 

49 env = core.read_dotenv(f.name) 

50 assert env["FOO"] == "BAR" 

51 

52 

53def test_empty() -> None: 

54 """Empty values become empty strings.""" 

55 TEST = "FOO=" 

56 

57 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

58 f.write(TEST) 

59 

60 env = core.read_dotenv(f.name) 

61 assert env["FOO"] == "" 

62 

63 

64def test_inner_quotes() -> None: 

65 """Inner quotes are mainained.""" 

66 TEST = "\n".join(["FOO1=this 'is' a test", 'FOO2=this "is" a test']) 

67 

68 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

69 f.write(TEST) 

70 

71 env = core.read_dotenv(f.name) 

72 assert env["FOO1"] == "this 'is' a test" 

73 assert env["FOO2"] == 'this "is" a test' 

74 

75 

76def test_trim_whitespaces() -> None: 

77 """Whitespaces are stripped from unquoted values.""" 

78 TEST = "FOO= test " 

79 

80 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

81 f.write(TEST) 

82 

83 env = core.read_dotenv(f.name) 

84 assert env["FOO"] == "test" 

85 

86 

87def test_keep_whitespaces() -> None: 

88 """Whitespaces are mainteined from quoted values.""" 

89 TEST = "FOO=' test '" 

90 

91 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

92 f.write(TEST) 

93 

94 env = core.read_dotenv(f.name) 

95 assert env["FOO"] == " test " 

96 

97 

98def test_multiline() -> None: 

99 """Quoted values can contain newlines.""" 

100 TEST = r'FOO="This is\nbar"' 

101 

102 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

103 f.write(TEST) 

104 

105 env = core.read_dotenv(f.name) 

106 assert env["FOO"] == "This is\nbar" 

107 

108 

109@pytest.mark.parametrize( 

110 "input_, expected", 

111 [ 

112 ('FOO="Test"', "Test"), 

113 ("FOO='Test'", "Test"), 

114 ("FOO='\"Test\"'", '"Test"'), 

115 ("FOO=\"'Test'\"", "'Test'"), 

116 ], 

117) 

118def test_quotes(input_: str, expected: str) -> None: 

119 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

120 f.write(input_) 

121 

122 env = core.read_dotenv(f.name) 

123 assert env["FOO"] == expected 

124 

125 

126def test_comments() -> None: 

127 """Lines starting with # are ignored.""" 

128 TEST = """ 

129 FOO=BAR 

130 # comment 

131 BAR=BAZ 

132 """ 

133 

134 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

135 f.write(TEST) 

136 

137 env = core.read_dotenv(f.name) 

138 assert len(env) == 2 

139 assert env["FOO"] == "BAR" 

140 assert env["BAR"] == "BAZ" 

141 

142 

143def test_emtpy_lines() -> None: 

144 """Empty lines are skipped.""" 

145 TEST = """ 

146 FOO=BAR 

147 

148 BAR=BAZ 

149 """ 

150 

151 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

152 f.write(TEST) 

153 

154 env = core.read_dotenv(f.name) 

155 assert len(env) == 2 

156 assert env["FOO"] == "BAR" 

157 assert env["BAR"] == "BAZ" 

158 

159 

160def test_export() -> None: 

161 """Exports are allowed.""" 

162 TEST = "export FOO=BAR" 

163 

164 with tempfile.NamedTemporaryFile("w", delete=False) as f: 

165 f.write(TEST) 

166 

167 env = core.read_dotenv(f.name) 

168 assert env["FOO"] == "BAR"