diff --git a/scm-core/src/main/java/sonia/scm/update/V1Properties.java b/scm-core/src/main/java/sonia/scm/update/V1Properties.java index 984a1e0fdb..9347d584ce 100644 --- a/scm-core/src/main/java/sonia/scm/update/V1Properties.java +++ b/scm-core/src/main/java/sonia/scm/update/V1Properties.java @@ -5,6 +5,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.util.List; +import java.util.Optional; import static java.util.Arrays.asList; import static java.util.Arrays.stream; @@ -27,7 +28,19 @@ public class V1Properties { } public String get(String key) { - return properties.stream().filter(p -> key.equals(p.getKey())).map(V1Property::getValue).findFirst().orElse(null); + return getOptional(key).orElse(null); + } + + public Optional getOptional(String key) { + return properties.stream().filter(p -> key.equals(p.getKey())).map(V1Property::getValue).findFirst(); + } + + public Optional getBoolean(String key) { + return getOptional(key).map(Boolean::valueOf); + } + + public > Optional getEnum(String key, Class enumType) { + return getOptional(key).map(name -> Enum.valueOf(enumType, name)); } public boolean hasAny(String[] keys) { diff --git a/scm-test/src/main/java/sonia/scm/update/V1PropertyDaoTestUtil.java b/scm-test/src/main/java/sonia/scm/update/V1PropertyDaoTestUtil.java new file mode 100644 index 0000000000..44020ca8a1 --- /dev/null +++ b/scm-test/src/main/java/sonia/scm/update/V1PropertyDaoTestUtil.java @@ -0,0 +1,40 @@ +package sonia.scm.update; + +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +import static java.util.Arrays.stream; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class V1PropertyDaoTestUtil { + + private final V1PropertyDAO propertyDAO = mock(V1PropertyDAO.class); + + public V1PropertyDAO getPropertyDAO() { + return propertyDAO; + } + + public void mockRepositoryProperties(PropertiesForRepository... mockedPropertiesForRepositories) { + Map map = new HashMap<>(); + stream(mockedPropertiesForRepositories).forEach(p -> map.put(p.repositoryId, p.asProperties())); + V1PropertyReader.Instance v1PropertyReader = new MapBasedPropertyReaderInstance(map); + when(propertyDAO.getProperties(argThat(argument -> argument instanceof RepositoryV1PropertyReader))).thenReturn(v1PropertyReader); + } + + public static class PropertiesForRepository { + private final String repositoryId; + private final Map properties; + + public PropertiesForRepository(String repositoryId, Map properties) { + this.repositoryId = repositoryId; + this.properties = properties; + } + + V1Properties asProperties() { + return new V1Properties(properties.entrySet().stream().map(e -> new V1Property(e.getKey(), e.getValue())).collect(Collectors.toList())); + } + } +}