Skip to content

Commit

Permalink
Merge pull request #2 from funkyFangs/SC-1-add-unit-tests
Browse files Browse the repository at this point in the history
SC-1: add unit tests
  • Loading branch information
funkyFangs committed May 10, 2023
2 parents d1ac34f + 1dc6e86 commit 9c8eedb
Show file tree
Hide file tree
Showing 15 changed files with 738 additions and 17 deletions.
25 changes: 25 additions & 0 deletions .idea/runConfigurations/Build_Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions .idea/runConfigurations/Run_Tests.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 0 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@ plugins {
id 'idea'
}

allprojects {
test {
useJUnitPlatform()
}
}

subprojects {
apply plugin: 'idea'
apply plugin: 'java'
Expand Down
7 changes: 7 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ junit = '5.9.2'
# Lombok
lombok-plugin = '8.0.1'

# Mockito
mockito = '5.3.1'

# Reflections
reflections = '0.10.2'

Expand Down Expand Up @@ -49,6 +52,10 @@ junit-jupiter-api = {group = 'org.junit.jupiter', name = 'junit-jupiter-api', ve
junit-jupiter-engine = {group = 'org.junit.jupiter', name = 'junit-jupiter-engine', version.ref = 'junit'}
junit-jupiter-params = {group = 'org.junit.jupiter', name = 'junit-jupiter-params', version.ref = 'junit'}

# Mockito
mockito-core = {group = 'org.mockito', name = 'mockito-core', version.ref = 'mockito'}
mockito-junit-jupiter = {group = 'org.mockito', name ='mockito-junit-jupiter', version.ref = 'mockito'}

# Reflections
reflections = {group = 'org.reflections', name = 'reflections', version.ref = 'reflections'}

Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
8 changes: 8 additions & 0 deletions springdoc-customizer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ dependencies {
testRuntimeOnly libs.junit.jupiter.engine
testImplementation libs.junit.jupiter.params

// Mockito
testImplementation libs.mockito.core
testImplementation libs.mockito.junit.jupiter

// Reflections
implementation libs.reflections

Expand All @@ -31,4 +35,8 @@ dependencies {

// SpringDoc
implementation libs.springdoc.openapi.starter.common
}

test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
import lombok.Setter;
import org.springdoc.core.properties.SpringDocConfigProperties;

import java.util.Set;

import static java.util.Collections.emptySet;

/**
* Configuration properties related the {@link ExamplesOpenApiCustomizer}.
*
Expand All @@ -22,7 +26,7 @@ public class ExamplesCustomizerConfigurationProperties {
/**
* Packages to scan for examples annotated with {@link ExampleDetails}.
*/
private String[] packagesToScan = {};
private Set<String> packagesToScan = emptySet();

/**
* Determines if examples should be validated based on a {@link Validator}, if available. Invalid examples will
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.funky.fangs.springdoc.customizer.configuration;

import com.google.common.annotations.VisibleForTesting;
import io.funky.fangs.springdoc.customizer.annotations.ExampleDetails;
import io.funky.fangs.springdoc.customizer.annotations.ExampleTarget;
import io.funky.fangs.springdoc.customizer.annotations.ExampleType;
Expand All @@ -11,6 +12,7 @@
import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
import jakarta.validation.Validator;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.reflections.Reflections;
import org.reflections.scanners.Scanners;
Expand All @@ -25,6 +27,7 @@
import static io.funky.fangs.springdoc.customizer.utilities.ExampleUtilities.*;
import static io.funky.fangs.springdoc.customizer.utilities.ReflectionUtilities.*;
import static io.funky.fangs.springdoc.customizer.utilities.RequestMappingUtilities.*;
import static lombok.AccessLevel.PACKAGE;

/**
* A {@link OpenApiCustomizer} which injects examples annotated with {@link ExampleDetails}
Expand All @@ -34,6 +37,8 @@
* @since 2.1.0
*/
@Slf4j
@VisibleForTesting
@Getter(PACKAGE)
public class ExamplesOpenApiCustomizer implements OpenApiCustomizer {
@Nonnull
private final String group;
Expand All @@ -59,7 +64,7 @@ public ExamplesOpenApiCustomizer(@Nullable String group,
@Nullable String defaultConsumesMediaType,
@Nullable String defaultProducesMediaType,
@Nullable Validator validator,
String... packagesToScan) {
Collection<String> packagesToScan) {
this.group = group == null ? "" : group;
this.defaultConsumesMediaType = defaultConsumesMediaType;
this.defaultProducesMediaType = defaultProducesMediaType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Stream;
import java.util.Optional;

import static com.google.common.collect.ImmutableListMultimap.toImmutableListMultimap;
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.toSet;

Expand Down Expand Up @@ -110,10 +113,9 @@ public Multimap<ExampleMethod, Method> getControllerMethods(Class<?> controller,
*/
public Collection<String> getMediaTypes(ExampleType type, @Nullable String defaultConsumesMediaType,
@Nullable String defaultProducesMediaType) {
return Stream.of(Stream.of(type.mediaTypes()),
Stream.ofNullable(defaultConsumesMediaType).filter(ignored -> type.value() == Type.REQUEST),
Stream.ofNullable(defaultProducesMediaType).filter(ignored -> type.value() == Type.RESPONSE))
.flatMap(Function.identity())
return Stream.concat(Stream.of(type.mediaTypes()),
Stream.of(defaultConsumesMediaType, defaultProducesMediaType)
.filter(Objects::nonNull))
.collect(toSet());
}

Expand All @@ -126,12 +128,12 @@ public Collection<String> getMediaTypes(ExampleType type, @Nullable String defau
*/
public Collection<Content> getContents(ExampleType type, Operation operation) {
return switch (type.value()) {
case REQUEST -> Stream.ofNullable(operation)
case REQUEST -> Optional.ofNullable(operation)
.map(Operation::getRequestBody)
.filter(Objects::nonNull)
// Qualified because Spring's @RequestBody is imported
.map(io.swagger.v3.oas.models.parameters.RequestBody::getContent)
.toList();
.map(List::of)
.orElse(emptyList());
case RESPONSE -> {
var responses = Stream.of(type.responses())
.map(HttpStatus::value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public <T> T getFieldValue(Field field) {
*/
@Nullable
@SuppressWarnings("unchecked")
public <T> T getFieldValue(Field field, T instance) {
public <T> T getFieldValue(Field field, Object instance) {
try {
var canAccess = field.canAccess(instance);

Expand Down
Loading

0 comments on commit 9c8eedb

Please sign in to comment.