Skip to content

Commit e14cd84

Browse files
committed
refactor: add convenience-method for validation
Also, maintain random-constructor flag when creating a new context for specific field.
1 parent 6062dce commit e14cd84

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

src/main/java/com/github/nylle/javafixture/CustomizationContext.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.List;
66
import java.util.Map;
77
import java.util.stream.Collectors;
8+
import java.util.stream.Stream;
89

910
public class CustomizationContext {
1011
private final List<String> ignoredFields;
@@ -39,6 +40,10 @@ public boolean useRandomConstructor() {
3940
return useRandomConstructor;
4041
}
4142

43+
public Stream<String> findAllCustomizedFieldNames() {
44+
return Stream.concat(customFields.keySet().stream(), ignoredFields.stream());
45+
}
46+
4247
public CustomizationContext newForField(String name) {
4348
return new CustomizationContext(
4449
ignoredFields.stream()
@@ -49,6 +54,6 @@ public CustomizationContext newForField(String name) {
4954
.filter(x -> x.getKey().startsWith(name + "."))
5055
.map(x -> Map.entry(x.getKey().substring(name.length() + 1), x.getValue()))
5156
.collect(Collectors.toMap(k -> k.getKey(), v -> v.getValue())),
52-
false);
57+
useRandomConstructor);
5358
}
5459
}

src/main/java/com/github/nylle/javafixture/Reflector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public Reflector(T instance, SpecimenType<T> type) {
2828
public Reflector<T> validateCustomization(CustomizationContext customizationContext) {
2929
var declaredFields = getDeclaredFields(type.asClass()).map(field -> field.getName()).collect(toList());
3030

31-
var missingDeclaredField = Stream.concat(customizationContext.getCustomFields().keySet().stream(), customizationContext.getIgnoredFields().stream())
31+
var missingDeclaredField = customizationContext.findAllCustomizedFieldNames()
3232
.map(entry -> entry.replaceAll("\\..+", ""))
3333
.filter(entry -> !declaredFields.contains(entry))
3434
.findFirst();
@@ -42,7 +42,7 @@ public Reflector<T> validateCustomization(CustomizationContext customizationCont
4242
.entrySet()
4343
.stream()
4444
.filter(x -> x.getValue().size() > 1)
45-
.filter(x -> Stream.concat(customizationContext.getCustomFields().keySet().stream(), customizationContext.getIgnoredFields().stream())
45+
.filter(x -> customizationContext.findAllCustomizedFieldNames()
4646
.map(entry -> entry.replaceAll("\\..+", ""))
4747
.anyMatch(y -> y.equals(x.getKey())))
4848
.findFirst();

src/test/java/com/github/nylle/javafixture/CustomizationContextTest.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.util.List;
1010
import java.util.Map;
11+
import java.util.stream.Collectors;
1112

1213
import static org.assertj.core.api.Assertions.assertThat;
1314

@@ -67,12 +68,21 @@ void returnsContextWithEmptyCustomizedNestedFieldWhenFieldHasNoNestedFields(Obje
6768
@TestWithCases
6869
@TestCase(bool1 = true)
6970
@TestCase(bool1 = false)
70-
void useRandomConstructorIsAlwaysFalse(boolean useRandomConstructor, @com.github.nylle.javafixture.annotations.testcases.Fixture String fieldName) {
71+
void useRandomConstructorIsMaintained(boolean useRandomConstructor, @com.github.nylle.javafixture.annotations.testcases.Fixture String fieldName) {
7172
var sut = new CustomizationContext(List.of(), Map.of(), useRandomConstructor);
7273

7374
var actual = sut.newForField(fieldName);
7475

75-
assertThat(actual.useRandomConstructor()).isFalse();
76+
assertThat(actual.useRandomConstructor()).isEqualTo(useRandomConstructor);
7677
}
7778
}
79+
80+
@Test
81+
void findAllCustomizedFieldNames() {
82+
var sut = new CustomizationContext(List.of("remove"), Map.of("change", new Object()), false);
83+
84+
var actual = sut.findAllCustomizedFieldNames().collect(Collectors.toList());
85+
86+
assertThat(actual).containsExactlyInAnyOrder("remove", "change");
87+
}
7888
}

0 commit comments

Comments
 (0)