Skip to content

Commit b222562

Browse files
committed
(fix) dotenv entries and entry filter
1 parent 691e1c7 commit b222562

File tree

3 files changed

+160
-14
lines changed

3 files changed

+160
-14
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<groupId>io.github.cdimascio</groupId>
1212
<artifactId>dotenv-java</artifactId>
13-
<version>1.0.1</version>
13+
<version>1.0.2</version>
1414

1515
<licenses>
1616
<license>

src/main/java/io/github/cdimascio/dotenv/DotenvBuilder.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,20 @@ public DotenvImpl load() throws DotenvException {
7575
}
7676

7777
public static class DotenvImpl implements Dotenv {
78-
private final Map<String, String> map;
78+
private final Map<String, String> envVars;
7979
private final Set<DotenvEntry> set;
80+
private final Set<DotenvEntry> setInFile;
81+
private final Map<String, String> envVarsInFile;
8082
public DotenvImpl(List<DotenvEntry> envVars) {
81-
this.map = envVars.stream().collect(toMap(DotenvEntry::getKey, DotenvEntry::getValue));
82-
this.set = buildEntries().entrySet().stream()
83+
this.envVarsInFile = envVars.stream().collect(toMap(DotenvEntry::getKey, DotenvEntry::getValue));
84+
this.envVars = new HashMap<>(this.envVarsInFile);
85+
System.getenv().forEach(this.envVars::put);
86+
87+
this.set =this.envVars.entrySet().stream()
88+
.map(it -> new DotenvEntry(it.getKey(), it.getValue()))
89+
.collect(toUnmodifiableSet());
90+
91+
this.setInFile =this.envVarsInFile.entrySet().stream()
8392
.map(it -> new DotenvEntry(it.getKey(), it.getValue()))
8493
.collect(toUnmodifiableSet());
8594
}
@@ -91,27 +100,20 @@ public Set<DotenvEntry> entries() {
91100

92101
@Override
93102
public Set<DotenvEntry> entries(EntriesFilter filter) {
94-
return this.map.entrySet().stream()
95-
.map(it -> new DotenvEntry(it.getKey(), it.getValue()))
96-
.collect(toUnmodifiableSet());
103+
if (filter != null) return setInFile;
104+
return entries();
97105
}
98106

99107
@Override
100108
public String get(String key) {
101109
var value = System.getenv(key);
102-
return value != null ? value : map.get(key);
110+
return value != null ? value : envVars.get(key);
103111
}
104112

105113
@Override
106114
public String get(String key, String defaultValue) {
107115
var value = this.get(key);
108116
return value != null ? value : defaultValue;
109117
}
110-
111-
private Map<String, String> buildEntries() {
112-
var envMap = new HashMap<String, String>();
113-
System.getenv().forEach(envMap::put);
114-
return envMap;
115-
}
116118
}
117119
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package tests;
2+
3+
import io.github.cdimascio.dotenv.DotenvException;
4+
import io.github.cdimascio.dotenv.Dotenv;
5+
import org.junit.Test;
6+
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
10+
import static org.junit.Assert.*;
11+
12+
public class BasicTests {
13+
private Map<String, String> envVars = new HashMap<>() {{
14+
put("MY_TEST_EV1", "my test ev 1");
15+
put("MY_TEST_EV2", "my test ev 2");
16+
put("WITHOUT_VALUE", "");
17+
put("MULTI_LINE", "hello\\nworld");
18+
}};
19+
20+
@Test(expected = DotenvException.class)
21+
public void dotenvMalformed() {
22+
Dotenv.configure()
23+
.directory("./src/test/resources")
24+
.load();
25+
}
26+
27+
@Test
28+
public void dotenvIgnoreMalformed() {
29+
var dotenv = Dotenv.configure()
30+
.directory("./src/test/resources")
31+
.ignoreIfMalformed()
32+
.load();
33+
34+
envVars.forEach((key, expected) -> {
35+
var actual = dotenv.get(key);
36+
assertEquals(expected, actual);
37+
});
38+
39+
assertHostEnvVar(dotenv);
40+
}
41+
42+
@Test
43+
public void dotenvFilename() {
44+
var dotenv = Dotenv.configure()
45+
.directory("./src/test/resources")
46+
.filename("env")
47+
.ignoreIfMalformed()
48+
.load();
49+
50+
envVars.forEach((key, expected) -> {
51+
var actual = dotenv.get(key);
52+
assertEquals(expected, actual);
53+
});
54+
55+
assertHostEnvVar(dotenv);
56+
}
57+
58+
@Test
59+
public void resourceRelative() {
60+
var dotenv = Dotenv.configure()
61+
.directory("./")
62+
.ignoreIfMalformed()
63+
.load();
64+
assertEquals("my test ev 1", dotenv.get("MY_TEST_EV1"));
65+
66+
assertHostEnvVar(dotenv);
67+
}
68+
69+
@Test
70+
public void resourceCurrent() {
71+
var dotenv = Dotenv.configure()
72+
.ignoreIfMalformed()
73+
.load();
74+
assertEquals("my test ev 1", dotenv.get("MY_TEST_EV1"));
75+
76+
assertHostEnvVar(dotenv);
77+
}
78+
79+
@Test
80+
public void systemProperties() {
81+
var dotenv = Dotenv.configure()
82+
.ignoreIfMalformed()
83+
.systemProperties()
84+
.load();
85+
86+
assertHostEnvVar(dotenv);
87+
assertEquals("my test ev 1", dotenv.get("MY_TEST_EV1"));
88+
assertEquals("my test ev 1", System.getProperty("MY_TEST_EV1"));
89+
dotenv.entries().forEach(entry -> System.clearProperty(entry.getKey()));
90+
}
91+
92+
@Test
93+
public void noSystemProperties() {
94+
var dotenv = Dotenv.configure()
95+
.ignoreIfMalformed()
96+
.load();
97+
98+
assertHostEnvVar(dotenv);
99+
assertEquals("my test ev 1", dotenv.get("MY_TEST_EV1"));
100+
assertNull(System.getProperty("MY_TEST_EV1"));
101+
}
102+
103+
@Test
104+
public void iterateOverDotenv() {
105+
var dotenv = Dotenv.configure()
106+
.ignoreIfMalformed()
107+
.load();
108+
109+
for (var e : dotenv.entries()) {
110+
assertEquals(dotenv.get(e.getKey()), e.getValue());
111+
}
112+
}
113+
114+
@Test(expected = DotenvException.class)
115+
public void dotenvMissing() {
116+
Dotenv.configure()
117+
.directory("/missing/.env")
118+
.load();
119+
}
120+
121+
@Test
122+
public void dotenvIgnoreMissing() {
123+
var dotenv = Dotenv.configure()
124+
.directory("/missing/.env")
125+
.ignoreIfMissing()
126+
.load();
127+
128+
assertHostEnvVar(dotenv);
129+
130+
assertNull(dotenv.get("MY_TEST_EV1"));
131+
}
132+
133+
private void assertHostEnvVar(Dotenv env) {
134+
var isWindows = System.getProperty("os.name").toLowerCase().contains("win");
135+
if (isWindows) {
136+
var path = env.get("PATH");
137+
assertNotNull(path);
138+
} else {
139+
var expectedHome = System.getProperty("user.home");
140+
var actualHome = env.get("HOME");
141+
assertEquals(expectedHome, actualHome);
142+
}
143+
}
144+
}

0 commit comments

Comments
 (0)