Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion multiapi-engine/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>com.sngular</groupId>
<artifactId>multiapi-engine</artifactId>
<version>6.7.1</version>
<version>6.7.2</version>
<packaging>jar</packaging>

<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,25 @@ public class AsyncApiGeneratorFixtures {
.build()
);

static final List<SpecFile> TEST_CUSTOM_VALIDATORS_DIFFERENT_PACKAGES = List.of(
SpecFile
.builder()
.filePath("asyncapigenerator/v2/testCustomValidatorsDifferentPackages/event-api.yml")
.consumer(OperationParameterObject.builder()
.ids("customValidatorResponse")
.modelNameSuffix("DTO")
.apiPackage("com.sngular.scsplugin.customvalidatordiff.model.event.consumer")
.modelPackage("com.sngular.scsplugin.customvalidatordiff.model.event.consumer")
.build())
.supplier(OperationParameterObject.builder()
.ids("customValidatorClients")
.modelNameSuffix("DTO")
.apiPackage("com.sngular.scsplugin.customvalidatordiff.model.event.producer")
.modelPackage("com.sngular.scsplugin.customvalidatordiff.model.event.producer")
.build())
.build()
);

static final List<SpecFile> TEST_FILE_GENERATION_ISSUE = List.of(
SpecFile
.builder()
Expand Down Expand Up @@ -735,6 +754,67 @@ static Function<Path, Boolean> validateCustomValidators(final int springBootVers
customValidatorTest(path, expectedValidatorFiles, DEFAULT_CUSTOM_VALIDATOR_FOLDER);
}

static Function<Path, Boolean> validateCustomValidatorsDifferentPackages() {
final String DEFAULT_CONSUMER_MODEL_FOLDER = "generated/com/sngular/scsplugin/customvalidatordiff/model/event/consumer";

final String DEFAULT_PRODUCER_MODEL_FOLDER = "generated/com/sngular/scsplugin/customvalidatordiff/model/event/producer";

final String COMMON_PATH = "asyncapigenerator/v2/testCustomValidatorsDifferentPackages/";

final List<String> expectedValidatorFiles = List.of(
COMMON_PATH + "assets/customvalidator/MaxBigDecimal.java",
COMMON_PATH + "assets/customvalidator/MaxBigDecimalValidator.java",
COMMON_PATH + "assets/customvalidator/MaxDouble.java",
COMMON_PATH + "assets/customvalidator/MaxDoubleValidator.java",
COMMON_PATH + "assets/customvalidator/MaxFloat.java",
COMMON_PATH + "assets/customvalidator/MaxFloatValidator.java",
COMMON_PATH + "assets/customvalidator/MaxInteger.java",
COMMON_PATH + "assets/customvalidator/MaxIntegerValidator.java",
COMMON_PATH + "assets/customvalidator/MinBigDecimal.java",
COMMON_PATH + "assets/customvalidator/MinBigDecimalValidator.java",
COMMON_PATH + "assets/customvalidator/MinDouble.java",
COMMON_PATH + "assets/customvalidator/MinDoubleValidator.java",
COMMON_PATH + "assets/customvalidator/MinFloat.java",
COMMON_PATH + "assets/customvalidator/MinFloatValidator.java",
COMMON_PATH + "assets/customvalidator/MinInteger.java",
COMMON_PATH + "assets/customvalidator/MinIntegerValidator.java",
COMMON_PATH + "assets/customvalidator/NotNull.java",
COMMON_PATH + "assets/customvalidator/NotNullValidator.java",
COMMON_PATH + "assets/customvalidator/Pattern.java",
COMMON_PATH + "assets/customvalidator/PatternValidator.java",
COMMON_PATH + "assets/customvalidator/Size.java",
COMMON_PATH + "assets/customvalidator/SizeValidator.java"
);

final List<String> expectedProducerValidatorFiles = List.of(
COMMON_PATH + "assets/customvalidator_producer/MaxBigDecimal.java",
COMMON_PATH + "assets/customvalidator_producer/MaxBigDecimalValidator.java",
COMMON_PATH + "assets/customvalidator_producer/MaxDouble.java",
COMMON_PATH + "assets/customvalidator_producer/MaxDoubleValidator.java",
COMMON_PATH + "assets/customvalidator_producer/MaxFloat.java",
COMMON_PATH + "assets/customvalidator_producer/MaxFloatValidator.java",
COMMON_PATH + "assets/customvalidator_producer/MaxInteger.java",
COMMON_PATH + "assets/customvalidator_producer/MaxIntegerValidator.java",
COMMON_PATH + "assets/customvalidator_producer/MinBigDecimal.java",
COMMON_PATH + "assets/customvalidator_producer/MinBigDecimalValidator.java",
COMMON_PATH + "assets/customvalidator_producer/MinDouble.java",
COMMON_PATH + "assets/customvalidator_producer/MinDoubleValidator.java",
COMMON_PATH + "assets/customvalidator_producer/MinFloat.java",
COMMON_PATH + "assets/customvalidator_producer/MinFloatValidator.java",
COMMON_PATH + "assets/customvalidator_producer/MinInteger.java",
COMMON_PATH + "assets/customvalidator_producer/MinIntegerValidator.java",
COMMON_PATH + "assets/customvalidator_producer/NotNull.java",
COMMON_PATH + "assets/customvalidator_producer/NotNullValidator.java",
COMMON_PATH + "assets/customvalidator_producer/Pattern.java",
COMMON_PATH + "assets/customvalidator_producer/PatternValidator.java",
COMMON_PATH + "assets/customvalidator_producer/Size.java",
COMMON_PATH + "assets/customvalidator_producer/SizeValidator.java"
);

return path -> customValidatorTest(path, expectedValidatorFiles, DEFAULT_CONSUMER_MODEL_FOLDER + "/customvalidator") &&
customValidatorTest(path, expectedProducerValidatorFiles, DEFAULT_PRODUCER_MODEL_FOLDER + "/customvalidator");
}

private static String calculateJavaEEPackage(final int springBootVersion) {
if (3 <= springBootVersion) {
return "jakarta/";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ static Stream<Arguments> fileSpecToProcess() {
Arguments.of("TestIssueInfiniteLoop", AsyncApiGeneratorFixtures.TEST_ISSUE_INFINITE_LOOP,
AsyncApiGeneratorFixtures.validateTestIssueInfiniteLoop()),
Arguments.of("TestCustomValidators", AsyncApiGeneratorFixtures.TEST_CUSTOM_VALIDATORS, AsyncApiGeneratorFixtures.validateCustomValidators(SPRING_BOOT_VERSION)),
Arguments.of("TestCustomValidatorsDifferentPackages", AsyncApiGeneratorFixtures.TEST_CUSTOM_VALIDATORS_DIFFERENT_PACKAGES,
AsyncApiGeneratorFixtures.validateCustomValidatorsDifferentPackages()),
Arguments.of("TestModelClassExceptionGeneration", AsyncApiGeneratorFixtures.TEST_MODEL_CLASS_EXCEPTION_GENERATION,
AsyncApiGeneratorFixtures.validateTestModelClassExceptionGeneration()),
Arguments.of("TestNoSchemas", AsyncApiGeneratorFixtures.TEST_NO_SCHEMAS, AsyncApiGeneratorFixtures.validateNoSchemas()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,12 @@ public final class OpenApiGeneratorFixtures {
.modelPackage("com.sngular.multifileplugin.pathlevelinlineparameter.model").modelNameSuffix("DTO")
.useTagsGroup(true).useLombokModelAnnotation(false).build());

static final List<SpecFile> TEST_NO_DESCRIPTION_REF_PARAMETER = List
.of(SpecFile.builder().filePath("openapigenerator/testNoDescriptionRefParameter/api-test.yml")
.apiPackage("com.sngular.multifileplugin.nodescriptionrefparameter")
.modelPackage("com.sngular.multifileplugin.nodescriptionrefparameter.model").modelNameSuffix("DTO")
.useLombokModelAnnotation(false).build());

static final List<SpecFile> TEST_WEB_CLIENT_GENERATION = List
.of(SpecFile.builder().filePath("openapigenerator/testWebClientApiGeneration/api-test.yml")
.apiPackage("com.sngular.multifileplugin.webclientapi")
Expand Down Expand Up @@ -810,6 +816,25 @@ static Function<Path, Boolean> validatePathLevelInlineParameterGeneration() {

}

static Function<Path, Boolean> validateNoDescriptionRefParameterGeneration() {

final String DEFAULT_TARGET_API = "generated/com/sngular/multifileplugin/nodescriptionrefparameter";

final String DEFAULT_MODEL_API = "generated/com/sngular/multifileplugin/nodescriptionrefparameter/model";

final String COMMON_PATH = "openapigenerator/testNoDescriptionRefParameter/";

final String ASSETS_PATH = COMMON_PATH + "assets/";

final List<String> expectedTestApiFile = List.of(ASSETS_PATH + "TestApi.java");

final List<String> expectedTestApiModelFiles = List.of();

return path -> commonTest(path, expectedTestApiFile, expectedTestApiModelFiles, DEFAULT_TARGET_API,
DEFAULT_MODEL_API, Collections.emptyList(), null);

}

static Function<Path, Boolean> validateWebClientGeneration() {

final String DEFAULT_TARGET_API = "generated/com/sngular/multifileplugin/webclientapi";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ static Stream<Arguments> fileSpecToProcess() {
OpenApiGeneratorFixtures.validatePathParameterGeneration()),
Arguments.of("testPathLevelInlineParameterGeneration", OpenApiGeneratorFixtures.TEST_PATH_LEVEL_INLINE_PARAMETER_GENERATION,
OpenApiGeneratorFixtures.validatePathLevelInlineParameterGeneration()),
Arguments.of("testNoDescriptionRefParameterGeneration", OpenApiGeneratorFixtures.TEST_NO_DESCRIPTION_REF_PARAMETER,
OpenApiGeneratorFixtures.validateNoDescriptionRefParameterGeneration()),
Arguments.of("testWebClientApiGeneration", OpenApiGeneratorFixtures.TEST_WEB_CLIENT_GENERATION,
OpenApiGeneratorFixtures.validateWebClientGeneration()),
Arguments.of("testClientPackageWebClientApiGeneration", OpenApiGeneratorFixtures.TEST_CLIENT_PACKAGE_WEB_CLIENT_GENERATION,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MaxBigDecimalValidator.class)
@Documented
public @interface MaxBigDecimal {
String maximum();
boolean exclusive();
String message() default "Value is bigger than the maximum.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import java.math.BigDecimal;
import java.util.Objects;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MaxBigDecimalValidator implements ConstraintValidator<MaxBigDecimal, BigDecimal> {

private BigDecimal maximum;
private boolean exclusive;

@Override
public void initialize(MaxBigDecimal constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
this.maximum = new BigDecimal(constraintAnnotation.maximum());
this.exclusive = constraintAnnotation.exclusive();
}

@Override
public boolean isValid(BigDecimal value, ConstraintValidatorContext context) {
return Objects.isNull(value) || (value.compareTo(this.maximum) < 0 || (!exclusive && value.compareTo(this.maximum) == 0));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MaxDoubleValidator.class)
@Documented
public @interface MaxDouble {
String maximum();
boolean exclusive();
String message() default "Value is bigger than the maximum.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import java.util.Objects;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MaxDoubleValidator implements ConstraintValidator<MaxDouble, Double> {

private double maximum;
private boolean exclusive;

@Override
public void initialize(MaxDouble constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
this.maximum = Double.parseDouble(constraintAnnotation.maximum());
this.exclusive = constraintAnnotation.exclusive();
}

@Override
public boolean isValid(Double value, ConstraintValidatorContext context) {
return Objects.isNull(value) || (value.doubleValue() < this.maximum || (!exclusive && value.doubleValue() == this.maximum));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MaxFloatValidator.class)
@Documented
public @interface MaxFloat {
String maximum();
boolean exclusive();
String message() default "Value is bigger than the maximum.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import java.util.Objects;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MaxFloatValidator implements ConstraintValidator<MaxFloat, Float> {

private float maximum;
private boolean exclusive;

@Override
public void initialize(MaxFloat constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
this.maximum = Float.parseFloat(constraintAnnotation.maximum());
this.exclusive = constraintAnnotation.exclusive();
}

@Override
public boolean isValid(Float value, ConstraintValidatorContext context) {
return Objects.isNull(value) || (value.floatValue() < this.maximum || (!exclusive && value.floatValue() == this.maximum));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MaxIntegerValidator.class)
@Documented
public @interface MaxInteger {
String maximum();
boolean exclusive();
String message() default "Value is bigger than the maximum.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import java.util.Objects;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MaxIntegerValidator implements ConstraintValidator<MaxInteger, Integer> {

private int maximum;
private boolean exclusive;

@Override
public void initialize(MaxInteger constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
this.maximum = Integer.parseInt(constraintAnnotation.maximum());
this.exclusive = constraintAnnotation.exclusive();
}

@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return Objects.isNull(value) || (value.intValue() < this.maximum || (!exclusive && value.intValue() == this.maximum));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MinBigDecimalValidator.class)
@Documented
public @interface MinBigDecimal {
String minimum();
boolean exclusive();
String message() default "Value is smaller than the minimum.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.sngular.scsplugin.customvalidatordiff.model.event.consumer.customvalidator;

import java.math.BigDecimal;
import java.util.Objects;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MinBigDecimalValidator implements ConstraintValidator<MinBigDecimal, BigDecimal> {

private BigDecimal minimum;
private boolean exclusive;

@Override
public void initialize(MinBigDecimal constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
this.minimum = new BigDecimal(constraintAnnotation.minimum());
this.exclusive = constraintAnnotation.exclusive();
}

@Override
public boolean isValid(BigDecimal value, ConstraintValidatorContext context) {
return Objects.isNull(value) || (value.compareTo(this.minimum) > 0 || (!exclusive && value.compareTo(this.minimum) == 0));
}
}
Loading
Loading