Skip to content

Commit d0327ba

Browse files
authored
feat: add environmentEnabled property on feature defs (#295)
1 parent 9734138 commit d0327ba

File tree

6 files changed

+73
-4
lines changed

6 files changed

+73
-4
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
<dependency>
6060
<groupId>io.getunleash</groupId>
6161
<artifactId>yggdrasil-engine</artifactId>
62-
<version>0.1.0</version>
62+
<version>0.1.1</version>
6363
</dependency>
6464
<dependency>
6565
<groupId>com.google.code.gson</groupId>

src/main/java/io/getunleash/FakeUnleash.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,10 @@ public Optional<FeatureDefinition> getFeatureToggleDefinition(String toggleName)
142142
.map(
143143
value ->
144144
new FeatureDefinition(
145-
toggleName, Optional.of("experiment"), "default"));
145+
toggleName,
146+
Optional.of("experiment"),
147+
"default",
148+
true));
146149
}
147150

148151
@Override

src/main/java/io/getunleash/FeatureDefinition.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,21 @@ public class FeatureDefinition {
88
private final String name;
99
private final Optional<String> type;
1010
private final String project;
11+
private final boolean environmentEnabled;
1112

1213
public FeatureDefinition(FeatureDef source) {
1314
this.name = source.getName();
1415
this.type = source.getType();
1516
this.project = source.getProject();
17+
this.environmentEnabled = source.isEnabled();
1618
}
1719

18-
public FeatureDefinition(String name, Optional<String> type, String project) {
20+
public FeatureDefinition(
21+
String name, Optional<String> type, String project, boolean environmentEnabled) {
1922
this.name = name;
2023
this.type = type;
2124
this.project = project;
25+
this.environmentEnabled = environmentEnabled;
2226
}
2327

2428
public String getName() {
@@ -32,4 +36,8 @@ public Optional<String> getType() {
3236
public String getProject() {
3337
return project;
3438
}
39+
40+
public boolean environmentEnabled() {
41+
return environmentEnabled;
42+
}
3543
}

src/main/java/io/getunleash/util/FeatureDefinitionAdapter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public void write(JsonWriter out, FeatureDefinition value) throws IOException {
1515
out.name("name").value(value.getName());
1616
out.name("project").value(value.getProject());
1717
out.name("type").value(value.getType().orElse(null));
18+
out.name("enabled").value(value.environmentEnabled());
1819
out.endObject();
1920
}
2021

@@ -23,6 +24,7 @@ public FeatureDefinition read(JsonReader in) throws IOException {
2324
String name = null;
2425
String project = null;
2526
Optional<String> type = Optional.empty();
27+
boolean enabled = false;
2628

2729
in.beginObject();
2830
while (in.hasNext()) {
@@ -36,6 +38,9 @@ public FeatureDefinition read(JsonReader in) throws IOException {
3638
case "type":
3739
type = Optional.of(in.nextString());
3840
break;
41+
case "enabled":
42+
enabled = in.nextBoolean();
43+
break;
3944
default:
4045
in.skipValue();
4146
}
@@ -46,6 +51,6 @@ public FeatureDefinition read(JsonReader in) throws IOException {
4651
throw new IOException("Missing required field 'name'");
4752
}
4853

49-
return new FeatureDefinition(name, type, project);
54+
return new FeatureDefinition(name, type, project, enabled);
5055
}
5156
}

src/test/java/io/getunleash/repository/FeatureRepositoryTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,29 @@ public void should_read_from_bootstrap_location_if_backup_was_empty() {
182182
assertEquals(5, knownToggles.size());
183183
}
184184

185+
@Test
186+
public void should_return_enabled_property_on_known_toggles() {
187+
when(backupHandler.read())
188+
.thenReturn(Optional.of(loadMockFeatures("unleash-repo-v2.json")));
189+
190+
when(bootstrapHandler.read()).thenReturn(Optional.empty());
191+
192+
FeatureRepository featureRepository =
193+
new FeatureRepositoryImpl(defaultConfig, backupHandler, new UnleashEngine());
194+
195+
List<FeatureDefinition> knownToggles =
196+
featureRepository.listKnownToggles().collect(Collectors.toList());
197+
198+
assertEquals(5, knownToggles.size());
199+
FeatureDefinition featureY =
200+
knownToggles.stream().filter(f -> f.getName().equals("featureY")).findFirst().get();
201+
assertThat(featureY.environmentEnabled()).isFalse();
202+
203+
FeatureDefinition featureX =
204+
knownToggles.stream().filter(f -> f.getName().equals("featureX")).findFirst().get();
205+
assertThat(featureX.environmentEnabled()).isTrue();
206+
}
207+
185208
@Test
186209
public void should_not_read_bootstrap_if_backup_was_found() {
187210

src/test/java/io/getunleash/util/ClientFeaturesParserTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,34 @@ public void test_deserialize_fails_if_name_is_not_set() {
6666
assertThat(e.getMessage()).contains("Missing required field 'name'");
6767
}
6868
}
69+
70+
@Test
71+
public void test_enabled_property_returned_if_set() {
72+
String basicFeatures =
73+
"{\"features\":[{\"name\":\"featureX\",\"project\":\"default\",\"enabled\":true,\"strategies\":[{\"name\":\"default\"}]}]}";
74+
List<FeatureDefinition> parsed = ClientFeaturesParser.parse(basicFeatures);
75+
76+
assertEquals(1, parsed.size());
77+
78+
FeatureDefinition feature = parsed.get(0);
79+
80+
assertEquals(feature.getName(), "featureX");
81+
assertEquals(feature.getProject(), "default");
82+
assertEquals(feature.environmentEnabled(), true);
83+
}
84+
85+
@Test
86+
public void test_enabled_property_defaults_to_false() {
87+
String basicFeatures =
88+
"{\"features\":[{\"name\":\"featureX\",\"project\":\"default\",\"strategies\":[{\"name\":\"default\"}]}]}";
89+
List<FeatureDefinition> parsed = ClientFeaturesParser.parse(basicFeatures);
90+
91+
assertEquals(1, parsed.size());
92+
93+
FeatureDefinition feature = parsed.get(0);
94+
95+
assertEquals(feature.getName(), "featureX");
96+
assertEquals(feature.getProject(), "default");
97+
assertEquals(feature.environmentEnabled(), false);
98+
}
6999
}

0 commit comments

Comments
 (0)