MetadataCollectorTests Class — spring-boot Architecture
Architecture documentation for the MetadataCollectorTests class in MetadataCollectorTests.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/MetadataCollectorTests.java lines 45–162
class MetadataCollectorTests {
private static final Predicate<ItemMetadata> NO_MERGE = (metadata) -> false;
private static final ConfigurationMetadata SINGLE_ITEM_METADATA = readMetadata("""
{
"properties": [
{ "name": "name", "type": "java.lang.String" }
]
}
""");
@Test
void addSingleItemMetadata() {
MetadataCollector collector = createSimpleCollector();
collector.add(SINGLE_ITEM_METADATA.getItems().get(0));
assertThat(collector.getMetadata()).has(Metadata.withProperty("name", String.class));
}
@Test
void addIfAbsentAddsPropertyIfItDoesNotExist() {
MetadataCollector collector = createSimpleCollector();
collector.addIfAbsent(SINGLE_ITEM_METADATA.getItems().get(0));
ConfigurationMetadata metadata = collector.getMetadata();
assertThat(metadata).has(Metadata.withProperty("name", String.class));
assertThat(metadata.getItems()).hasSize(1);
}
@Test
void addIfAbsentIgnoresExistingProperty() {
MetadataCollector collector = createSimpleCollector();
collector.addIfAbsent(SINGLE_ITEM_METADATA.getItems().get(0));
collector.addIfAbsent(SINGLE_ITEM_METADATA.getItems().get(0));
collector.addIfAbsent(SINGLE_ITEM_METADATA.getItems().get(0));
ConfigurationMetadata metadata = collector.getMetadata();
assertThat(metadata).has(Metadata.withProperty("name", String.class));
assertThat(metadata.getItems()).hasSize(1);
}
@Test
@SuppressWarnings("unchecked")
void addNewMetadataDoesNotInvokeConflictResolution() {
MetadataCollector collector = createSimpleCollector();
Consumer<ItemMetadata> conflictResolution = mock(Consumer.class);
collector.add(SINGLE_ITEM_METADATA.getItems().get(0), conflictResolution);
then(conflictResolution).shouldHaveNoInteractions();
}
@SuppressWarnings("unchecked")
@Test
void addMetadataWithExistingInstanceInvokesConflictResolution() {
MetadataCollector collector = createSimpleCollector();
ItemMetadata metadata = SINGLE_ITEM_METADATA.getItems().get(0);
collector.add(metadata);
Consumer<ItemMetadata> conflictResolution = mock(Consumer.class);
collector.add(metadata, conflictResolution);
then(conflictResolution).should().accept(metadata);
}
@Test
void addSingleItemHint() {
MetadataCollector collector = createSimpleCollector();
collector.add(SINGLE_ITEM_METADATA.getItems().get(0));
ValueHint firstValueHint = new ValueHint("one", "First.");
ValueHint secondValueHint = new ValueHint("two", "Second.");
ItemHint itemHint = new ItemHint("name", List.of(firstValueHint, secondValueHint), Collections.emptyList());
collector.add(itemHint);
assertThat(collector.getMetadata())
.has(Metadata.withHint("name").withValue(0, "one", "First.").withValue(1, "two", "Second."));
}
@Test
@SuppressWarnings("unchecked")
void getMetadataDoesNotInvokeMergeFunctionIfPreviousMetadataIsNull() {
Predicate<ItemMetadata> mergedRequired = mock(Predicate.class);
MetadataCollector collector = new MetadataCollector(mergedRequired, null);
collector.add(SINGLE_ITEM_METADATA.getItems().get(0));
collector.getMetadata();
then(mergedRequired).shouldHaveNoInteractions();
}
@Test
@SuppressWarnings("unchecked")
void getMetadataAddPreviousItemIfMergeFunctionReturnsTrue() {
Predicate<ItemMetadata> mergedRequired = mock(Predicate.class);
ItemMetadata itemMetadata = SINGLE_ITEM_METADATA.getItems().get(0);
given(mergedRequired.test(itemMetadata)).willReturn(true);
MetadataCollector collector = new MetadataCollector(mergedRequired, SINGLE_ITEM_METADATA);
assertThat(collector.getMetadata()).has(Metadata.withProperty("name", String.class));
then(mergedRequired).should().test(itemMetadata);
}
@Test
@SuppressWarnings("unchecked")
void getMetadataDoesNotAddPreviousItemIfMergeFunctionReturnsFalse() {
Predicate<ItemMetadata> mergedRequired = mock(Predicate.class);
ItemMetadata itemMetadata = SINGLE_ITEM_METADATA.getItems().get(0);
given(mergedRequired.test(itemMetadata)).willReturn(false);
MetadataCollector collector = new MetadataCollector(mergedRequired, SINGLE_ITEM_METADATA);
assertThat(collector.getMetadata().getItems()).isEmpty();
then(mergedRequired).should().test(itemMetadata);
}
private MetadataCollector createSimpleCollector() {
return new MetadataCollector(NO_MERGE, null);
}
private static ConfigurationMetadata readMetadata(String json) {
try {
JsonMarshaller marshaller = new JsonMarshaller();
return marshaller.read(new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)));
}
catch (Exception ex) {
throw new IllegalStateException("Invalid JSON: " + json, ex);
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free