Skip to content

Commit

Permalink
feat(solrteur): add types enum to Field IQSS#7662
Browse files Browse the repository at this point in the history
Add field types and make them usable as predicates for fields.
Add test.
  • Loading branch information
poikilotherm committed Apr 29, 2022
1 parent fea4d1c commit 03d19e0
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 5 deletions.
48 changes: 43 additions & 5 deletions modules/solr-configset/src/main/scripts/cli/util/model/Field.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,15 +103,53 @@ public String getErrorMessage() {
}
}

public enum Types implements Predicate<String> {
NONE("none"),
DATE("date"),
EMAIL("email"),
TEXT("text"),
TEXTBOX("textbox"),
URL("url"),
INT("int"),
FLOAT("float");

private final String name;

Types(final String name) {
this.name = name;
}

public static final class FieldBuilder {
// TODO: extend!
public Field build() {
return new Field();
private static final Map<String, Types> valueMap;
static {
Map<String, Types> map = new ConcurrentHashMap<>();
Arrays.stream(Types.values()).forEach(type -> map.put(type.toString(), type));
valueMap = Collections.unmodifiableMap(map);
}

@Override
public boolean test(String sut) {
// we demand correct case!
return this.toString().equals(sut);
}

public static Predicate<String> matchesTypes() {
Predicate<String> test = NONE;
for (Types type : Types.values()) {
test = test.or(type);
}
return test;
}

public static List<String> getTypesList() {
return valueMap.keySet().stream().collect(Collectors.toUnmodifiableList());
}

@Override
public String toString() {
return this.name;
}
}

private Field() {}

Optional<List<ControlledVocabulary>> controlledVocabularyValues = Optional.empty();
}
35 changes: 35 additions & 0 deletions modules/solr-configset/src/test/java/cli/util/model/FieldTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package cli.util.model;

import org.junit.jupiter.api.Nested;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import org.junit.jupiter.params.provider.ValueSource;

import java.util.function.Predicate;
import java.util.logging.Logger;

import static org.junit.jupiter.api.Assertions.*;

class FieldTest {

private static final Logger logger = Logger.getLogger(BlockTest.class.getCanonicalName());

@Nested
class TypesTest {
Predicate<String> allowedTypes = Field.Types.matchesTypes();

@ParameterizedTest
@NullAndEmptySource
@ValueSource(strings = {"foobar", "hello_hello", "NONE", "DATE"})
void failing(String subject) {
assertFalse(allowedTypes.test(subject));
}

@ParameterizedTest
@ValueSource(strings = {"none", "text", "textbox", "date", "email", "int", "float"})
void succeeding(String subject) {
assertTrue(allowedTypes.test(subject));
}
}

}

0 comments on commit 03d19e0

Please sign in to comment.