- add-source
+ add-document-schema-source-folder
generate-sources
add-source
-
+
diff --git a/schemaConfigs/gql/document.json b/schemaConfigs/gql/document.json
new file mode 100644
index 0000000..289a48d
--- /dev/null
+++ b/schemaConfigs/gql/document.json
@@ -0,0 +1,24 @@
+{
+ "packageName": "com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities",
+ "modelValidationAnnotation": "@jakarta.validation.constraints.NotNull",
+ "apiInterfaceStrategy": "DO_NOT_GENERATE",
+ "addGeneratedAnnotation": true,
+ "generatedAnnotation": "jakarta.annotation.Generated",
+ "generateBuilder": true,
+ "generateJacksonTypeIdResolver": true,
+ "customAnnotationsMapping": {
+ "ApplicationInput.id": [
+ "com.andrascsanyi.beanvalidatorextensions.LongAsStringMustBeZero(groups = {com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario.class})"
+ ],
+ "ApplicationInput.name": [
+ "com.andrascsanyi.beanvalidatorextensions.TrimmedNotBlank(groups = {com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario.class})",
+ "com.andrascsanyi.beanvalidatorextensions.TrimmedNotEmpty(groups = {com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario.class})",
+ "com.andrascsanyi.beanvalidatorextensions.TrimmedSize(min = 3, max = 255, groups = {com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario.class})"
+ ],
+ "ApplicationInput.description": [
+ "com.andrascsanyi.beanvalidatorextensions.TrimmedNotBlank(groups = {com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario.class})",
+ "com.andrascsanyi.beanvalidatorextensions.TrimmedNotEmpty(groups = {com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario.class})",
+ "com.andrascsanyi.beanvalidatorextensions.TrimmedSize(min = 3, max = 255, groups = {com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario.class})"
+ ]
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeGreaterOrEqualToOne.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeGreaterOrEqualToOne.java
deleted file mode 100644
index 06cc136..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeGreaterOrEqualToOne.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.Constraint;
-import jakarta.validation.Payload;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Validates if the provided input {@link String} is equal or greater than 0 when it is parsed as
- * Long.
- *
- * This validation annotation is used to check values coming via GraphQL where the ID is {@link
- * String}
- *
- *
The validation judges the null, empty or blank string values to be valid. The validation
- * judges the negative value to be invalid.
- */
-@Target({ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-@Constraint(validatedBy = LongAsStringMustBeGreaterOrEqualToOneValidator.class)
-@Documented
-public @interface LongAsStringMustBeGreaterOrEqualToOne {
- String message() default
- "{javax.validation.constraints.LongAsStringMustBeGreaterOrEqualToOne.message="
- + "The Long -{value}- provided as string must be zero!}";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeGreaterOrEqualToOneValidator.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeGreaterOrEqualToOneValidator.java
deleted file mode 100644
index 8de4cd6..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeGreaterOrEqualToOneValidator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.ConstraintValidator;
-import jakarta.validation.ConstraintValidatorContext;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class LongAsStringMustBeGreaterOrEqualToOneValidator
- implements ConstraintValidator {
-
- private final Logger log = LoggerFactory.getLogger(LongAsStringMustBeGreaterOrEqualToOne.class);
-
- @Override
- public boolean isValid(String value, ConstraintValidatorContext context) {
- if (value == null || value.isEmpty() || value.isBlank() || value.trim().isEmpty()) {
- return true;
- }
-
- try {
- long longValue = Long.parseLong(value);
-
- boolean isValid = longValue >= 1;
-
- if (!isValid) {
- context.disableDefaultConstraintViolation();
- context.buildConstraintViolationWithTemplate(
- "{javax.validation.constraints.LongAsStringMustBeZero.message}")
- .addConstraintViolation();
- }
-
- return isValid;
-
- } catch (NumberFormatException e) {
- log.warn("Could not parse long value: {}", value);
- }
- return false;
- }
-
- @Override
- public void initialize(LongAsStringMustBeGreaterOrEqualToOne constraintAnnotation) {
- ConstraintValidator.super.initialize(constraintAnnotation);
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeZero.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeZero.java
deleted file mode 100644
index 687c129..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeZero.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.Constraint;
-import jakarta.validation.Payload;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Validates if the provided input {@link String} is equal to 0 when it is parsed as Long.
- *
- * This validation annotation is used to check values coming via GraphQL where the ID is {@link
- * String}.
- *
- *
The validation judges the negative value, the null, empty or blank string values to be valid.
- */
-@Target({ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-@Constraint(validatedBy = LongAsStringMustBeZeroValidator.class)
-@Documented
-public @interface LongAsStringMustBeZero {
- String message() default
- "{javax.validation.constraints.LongAsStringMustBeZero.message="
- + "The Long -{value}- provided as string must be zero!}";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeZeroValidator.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeZeroValidator.java
deleted file mode 100644
index 53fc5b6..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/LongAsStringMustBeZeroValidator.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.ConstraintValidator;
-import jakarta.validation.ConstraintValidatorContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class LongAsStringMustBeZeroValidator
- implements ConstraintValidator {
-
- private final Logger log = LoggerFactory.getLogger(LongAsStringMustBeZeroValidator.class);
-
- @Override
- public void initialize(LongAsStringMustBeZero constraintAnnotation) {
- ConstraintValidator.super.initialize(constraintAnnotation);
- }
-
- @Override
- public boolean isValid(String value, ConstraintValidatorContext context) {
- if (value == null || value.isEmpty() || value.isBlank() || value.trim().isEmpty()) {
- return true;
- }
-
- try {
- long longValue = Long.parseLong(value);
-
- boolean isValid = longValue == 0;
-
- if (!isValid) {
- context.disableDefaultConstraintViolation();
- context.buildConstraintViolationWithTemplate(
- "{javax.validation.constraints.LongAsStringMustBeZero.message}")
- .addConstraintViolation();
- }
-
- return isValid;
-
- } catch (NumberFormatException e) {
- log.warn("Could not parse long value: {}", value);
- }
- return false;
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotBlank.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotBlank.java
deleted file mode 100644
index 84ae9c9..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotBlank.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.Constraint;
-import jakarta.validation.Payload;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Validates if the provided {@link String} value is empty after it is trimmed.
- *
- * The validator judges null to be invalid value.
- */
-@Target({ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-@Constraint(validatedBy = TrimmedNotBlankValidator.class)
-@Documented
-public @interface TrimmedNotBlank {
-
- String message() default "{com.andrascsanyi.encyclopediagalactica.common.validation" +
- ".TrimmedNotBlank.message=" +
- "When the provided string -{value}- is trimmed it must not be blank.}";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotBlankValidator.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotBlankValidator.java
deleted file mode 100644
index 347ff0a..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotBlankValidator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.ConstraintValidator;
-import jakarta.validation.ConstraintValidatorContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class TrimmedNotBlankValidator
- implements ConstraintValidator {
-
- private final static Logger log = LoggerFactory.getLogger(TrimmedNotBlankValidator.class);
-
- @Override
- public boolean isValid(String value, ConstraintValidatorContext context) {
- if (value == null) {
- context.disableDefaultConstraintViolation();
- context.buildConstraintViolationWithTemplate(
- "{com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedNotBlank=" +
- "The provided value (-{value}-) is null.}"
- ).addConstraintViolation();
- return false;
-
- }
-
- if (value.trim().isBlank()) {
- context.disableDefaultConstraintViolation();
- context.buildConstraintViolationWithTemplate(
- "{javax.validation.constraints.NotBlank.message=" +
- "When the provided string -{value}- is trimmed it must not be blank.}"
- ).addConstraintViolation();
- return false;
- }
- return true;
- }
-
- @Override
- public void initialize(TrimmedNotBlank constraintAnnotation) {
- ConstraintValidator.super.initialize(constraintAnnotation);
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotEmptyValidator.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotEmptyValidator.java
deleted file mode 100644
index d30f1d6..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotEmptyValidator.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.ConstraintValidator;
-import jakarta.validation.ConstraintValidatorContext;
-
-public class TrimmedNotEmptyValidator
- implements ConstraintValidator {
-
- @Override
- public boolean isValid(String value, ConstraintValidatorContext context) {
- if (value == null || value.trim().isEmpty()) {
- context.disableDefaultConstraintViolation();
- context.buildConstraintViolationWithTemplate(
- "{javax.validation.constraints.NotEmpty.message=" +
- "When the provided string -{value}- is trimmed it must not be empty}"
- ).addConstraintViolation();
- return false;
- }
- return true;
- }
-
- @Override
- public void initialize(TrimmedNotEmtpy constraintAnnotation) {
- ConstraintValidator.super.initialize(constraintAnnotation);
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotEmtpy.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotEmtpy.java
deleted file mode 100644
index 05cab57..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedNotEmtpy.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.Constraint;
-import jakarta.validation.Payload;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Validates if the provided {@link String} value is empty after it is trimmed.
- *
- * The validator judges null to be invalid value.
- */
-@Target({ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-@Constraint(validatedBy = TrimmedNotEmptyValidator.class)
-@Documented
-public @interface TrimmedNotEmtpy {
-
- String message() default "{javax.validation.constraints.NotEmpty.message=" +
- "When the provided string -{value}- is trimmed it must not be empty}";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedSize.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedSize.java
deleted file mode 100644
index d8b8afc..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedSize.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.Constraint;
-import jakarta.validation.Payload;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-@Constraint(validatedBy = TrimmedSizeValidator.class)
-@Documented
-public @interface TrimmedSize {
- String message() default "{com.andrascsanyi.encyclopediagalactica.common.validation" +
- ".TrimmedSize.message=" +
- "When the provided string -{value}- is trimmed it must be longer than and shorter than.}";
-
- Class>[] groups() default {};
-
- Class extends Payload>[] payload() default {};
-
- int min() default 0;
-
- int max() default Integer.MAX_VALUE;
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedSizeValidator.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedSizeValidator.java
deleted file mode 100644
index c5e8377..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/TrimmedSizeValidator.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import jakarta.validation.ConstraintValidator;
-import jakarta.validation.ConstraintValidatorContext;
-
-public class TrimmedSizeValidator implements ConstraintValidator {
-
- private int min;
- private int max;
-
- @Override
- public boolean isValid(String value, ConstraintValidatorContext context) {
- if (value == null) {
- context.disableDefaultConstraintViolation();
- context.buildConstraintViolationWithTemplate(
- "com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedSizeValidator.message=" +
- "The provided value(-{value}-} is null."
- ).addConstraintViolation();
- return false;
- }
-
- if (value.trim().length() < min || value.trim().length() > max) {
- context.disableDefaultConstraintViolation();
- context.buildConstraintViolationWithTemplate(
- "com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedSizeValidator.message=" +
- "The provided value(-{value}-} trimmed length is either " +
- "longer than {max} or shorter than {min}."
- ).addConstraintViolation();
- return false;
- }
- return true;
- }
-
- @Override
- public void initialize(TrimmedSize constraintAnnotation) {
- min = constraintAnnotation.min();
- max = constraintAnnotation.max();
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/ValidationConstraintsHelper.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/ValidationConstraintsHelper.java
deleted file mode 100644
index a98937d..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/ValidationConstraintsHelper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common.validation;
-
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import jakarta.validation.ConstraintViolation;
-
-import java.util.Set;
-
-public final class ValidationConstraintsHelper {
- public static String getViolationsAsString(Set> validationResult) {
- StringBuilder stringBuilder = new StringBuilder();
- validationResult.forEach(i -> {
- stringBuilder.append(i.getMessage()).append(" ");
- });
- return stringBuilder.toString();
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/ValidationHelpers.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/ValidationHelpers.java
new file mode 100644
index 0000000..3450c54
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/common/validation/ValidationHelpers.java
@@ -0,0 +1,20 @@
+package com.andrascsanyi.encyclopediagalactica.common.validation;
+
+public class ValidationHelpers {
+
+ /**
+ * Returns the provided annotation package and annotation name as {@link String}.
+ *
+ * For example: In case of {@link LongValueMustBe} it will return
+ * com.andrascsanyi.encyclopediagalactica.common.validator.LongValueMustBe
+ *
+ * @param annotation The annotation
+ *
+ * @return the annotation package and name as string separated by dots
+ */
+ public static String getPackageAndAnnotationName(Class> annotation) {
+ return annotation.getPackage()
+ + "."
+ + annotation.getName();
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/controllers/ApplicationController.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/controllers/ApplicationGraphqlController.java
similarity index 70%
rename from src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/controllers/ApplicationController.java
rename to src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/controllers/ApplicationGraphqlController.java
index 73cb85e..1a2ba3e 100644
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/controllers/ApplicationController.java
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/controllers/ApplicationGraphqlController.java
@@ -1,30 +1,26 @@
package com.andrascsanyi.encyclopediagalactica.document.api.graphql.controllers;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationResponse;
-import com.andrascsanyi.encyclopediagalactica.document.sagas.AddApplicationSaga;
-import com.andrascsanyi.encyclopediagalactica.document.sagas.GetAllApplicationsSaga;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas.AddApplicationSaga;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas.GetAllApplicationsSaga;
+import lombok.AllArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;
-import java.util.List;
-
@Controller
-public class ApplicationController {
+@AllArgsConstructor
+public class ApplicationGraphqlController {
- @Autowired
private AddApplicationSaga addApplicationSaga;
-
- @Autowired
private GetAllApplicationsSaga getAllApplicationsSaga;
- private final Logger log = LoggerFactory.getLogger(ApplicationController.class);
+ private final Logger log = LoggerFactory.getLogger(ApplicationGraphqlController.class);
@MutationMapping("addApplication")
public ApplicationResponse addApplication(
@@ -34,7 +30,7 @@ public ApplicationResponse addApplication(
}
@QueryMapping("getApplications")
- public ApplicationResponse getApplications() {
+ public ApplicationListResponse getApplications() {
return getAllApplicationsSaga.execute();
}
}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/input/ApplicationInput.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/input/ApplicationInput.java
deleted file mode 100644
index 655ab6d..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/input/ApplicationInput.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.api.graphql.input;
-
-import com.andrascsanyi.encyclopediagalactica.common.validation.LongAsStringMustBeZero;
-import com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedNotBlank;
-import com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedNotEmtpy;
-import com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedSize;
-import com.andrascsanyi.encyclopediagalactica.document.validation.AddApplicationScenario;
-import jakarta.validation.constraints.NotNull;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-public class ApplicationInput {
-
- @LongAsStringMustBeZero(groups = {AddApplicationScenario.class})
- private String id;
-
- @NotNull(groups = {AddApplicationScenario.class})
- @TrimmedNotEmtpy(groups = {AddApplicationScenario.class})
- @TrimmedNotBlank(groups = {AddApplicationScenario.class})
- @TrimmedSize(min = 3, max = 255, groups = {AddApplicationScenario.class})
- private String name;
-
- @NotNull(groups = {AddApplicationScenario.class})
- @TrimmedNotEmtpy(groups = {AddApplicationScenario.class})
- @TrimmedNotBlank(groups = {AddApplicationScenario.class})
- @TrimmedSize(min = 3, max = 255, groups = {AddApplicationScenario.class})
- private String description;
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/mappers/ApplicationMapper.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/mappers/ApplicationMapper.java
new file mode 100644
index 0000000..b3cc77e
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/mappers/ApplicationMapper.java
@@ -0,0 +1,44 @@
+package com.andrascsanyi.encyclopediagalactica.document.api.graphql.mappers;
+
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListOutputItem;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationOutput;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import org.mapstruct.BeanMapping;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+
+import java.util.List;
+
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.WARN)
+public interface ApplicationMapper {
+
+ @Mapping(source = "id", target = "id")
+ @Mapping(source = "name", target = "name")
+ @Mapping(source = "description", target = "description")
+ @BeanMapping(ignoreByDefault = true)
+ Application toApplicationEntity(ApplicationInput applicationInput);
+
+ @Mapping(source = "id", target = "id")
+ @Mapping(source = "name", target = "name")
+ @Mapping(source = "description", target = "description")
+ @BeanMapping(ignoreByDefault = true)
+ ApplicationOutput toApplicationOutput(Application applicationEntity);
+
+ @Mapping(source = "id", target = "id")
+ @Mapping(source = "name", target = "name")
+ @Mapping(source = "description", target = "description")
+ @BeanMapping(ignoreByDefault = true)
+ ApplicationListOutputItem toApplicationListOutputItem(Application applicationEntity);
+
+ default List toApplicationListOutputItems(
+ List applicationEntities
+ ) {
+ return applicationEntities.stream().map(this::toApplicationListOutputItem).toList();
+ }
+
+ default List toApplicationOutputList(List result) {
+ return result.stream().map(this::toApplicationOutput).toList();
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationListOutput.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationListOutput.java
deleted file mode 100644
index 7106210..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationListOutput.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.api.graphql.output;
-
-import java.util.List;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
-public class ApplicationListOutput implements ApplicationResponse {
-
- private List applicationList;
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationOutput.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationOutput.java
deleted file mode 100644
index a19e11f..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationOutput.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.api.graphql.output;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-public class ApplicationOutput implements ApplicationResponse {
-
- @NotNull
- @NotEmpty
- @NotBlank
- private String id;
-
- @NotNull
- @NotEmpty
- @NotBlank
- @Size(min = 3, max = 255)
- private String name;
-
- @NotNull
- @NotEmpty
- @NotBlank
- @Size(min = 3, max = 255)
- private String description;
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/DocumentErrorOutput.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/DocumentErrorOutput.java
deleted file mode 100644
index d6b104b..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/DocumentErrorOutput.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.api.graphql.output;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
-public class DocumentErrorOutput implements ApplicationResponse {
- private String message;
- private String errorDetails;
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/AddApplicationSaga.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/AddApplicationSaga.java
new file mode 100644
index 0000000..2b6cacd
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/AddApplicationSaga.java
@@ -0,0 +1,58 @@
+package com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas;
+
+import com.andrascsanyi.beanvalidatorextensions.ValidationConstraintsHelper;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.DocumentErrorOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.mappers.ApplicationMapper;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario;
+import com.andrascsanyi.encyclopediagalactica.document.core.commands.AddApplicationCommand;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validator;
+import lombok.AllArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.util.Set;
+
+@Service
+@AllArgsConstructor
+public class AddApplicationSaga {
+
+ private AddApplicationCommand addApplicationCommand;
+ private ApplicationMapper applicationMapper;
+ private Validator validator;
+
+ private static final Logger log = LoggerFactory.getLogger(AddApplicationSaga.class);
+
+ public ApplicationResponse execute(ApplicationInput input) {
+ try {
+ validateInput(input);
+ Application applicationEntity = applicationMapper.toApplicationEntity(input);
+ Application result = addApplicationCommand.addApplication(applicationEntity);
+ return applicationMapper.toApplicationOutput(result);
+ } catch (Exception e) {
+
+ StringBuilder builder = new StringBuilder();
+ builder.append("Error happened while executing ")
+ .append(AddApplicationSaga.class.getSimpleName());
+
+ return DocumentErrorOutput.builder()
+ .setMessage(builder.toString())
+ .setErrorDetails(e.toString())
+ .build();
+ }
+ }
+
+ private void validateInput(ApplicationInput input) {
+ Set> violations = validator.validate(
+ input,
+ AddApplicationScenario.class);
+ if (!violations.isEmpty()) {
+ String message = ValidationConstraintsHelper.getViolationsAsString(violations);
+ throw new AddApplicationSagaException(message);
+ }
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSagaException.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/AddApplicationSagaException.java
similarity index 89%
rename from src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSagaException.java
rename to src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/AddApplicationSagaException.java
index ad3939b..2f7b72a 100644
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSagaException.java
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/AddApplicationSagaException.java
@@ -1,4 +1,4 @@
-package com.andrascsanyi.encyclopediagalactica.document.sagas;
+package com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas;
public class AddApplicationSagaException extends RuntimeException {
public AddApplicationSagaException() {
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/GetAllApplicationsSaga.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/GetAllApplicationsSaga.java
new file mode 100644
index 0000000..1bec62f
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/GetAllApplicationsSaga.java
@@ -0,0 +1,40 @@
+package com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas;
+
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListOutputItem;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.DocumentErrorOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.mappers.ApplicationMapper;
+import com.andrascsanyi.encyclopediagalactica.document.core.commands.GetAllApplicationsCommand;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class GetAllApplicationsSaga {
+
+ private GetAllApplicationsCommand getAllApplicationsCommand;
+
+ private ApplicationMapper applicationMapper;
+
+ public ApplicationListResponse execute() {
+ try {
+ List applications = getAllApplicationsCommand.getAllApplications();
+ List applicationListOutputItems = applicationMapper
+ .toApplicationListOutputItems(applications);
+ return ApplicationListOutput.builder()
+ .setApplicationList(applicationListOutputItems).build();
+ } catch (Exception e) {
+ StringBuilder b = new StringBuilder();
+ b.append("Error happened while executing ").append(GetAllApplicationsCommand.class);
+
+ return DocumentErrorOutput.builder()
+ .setMessage(b.toString())
+ .setErrorDetails(e.toString())
+ .build();
+ }
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetallApplicationsSagaException.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/GetallApplicationsSagaException.java
similarity index 89%
rename from src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetallApplicationsSagaException.java
rename to src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/GetallApplicationsSagaException.java
index 741a158..2723cf3 100644
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetallApplicationsSagaException.java
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/sagas/GetallApplicationsSagaException.java
@@ -1,4 +1,4 @@
-package com.andrascsanyi.encyclopediagalactica.document.sagas;
+package com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas;
public class GetallApplicationsSagaException extends RuntimeException {
public GetallApplicationsSagaException() {
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationResponse.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/scenarios/AddApplicationScenario.java
similarity index 54%
rename from src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationResponse.java
rename to src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/scenarios/AddApplicationScenario.java
index 188d183..00c67fb 100644
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/output/ApplicationResponse.java
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/scenarios/AddApplicationScenario.java
@@ -1,4 +1,4 @@
-package com.andrascsanyi.encyclopediagalactica.document.api.graphql.output;
+package com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios;
-public interface ApplicationResponse {
+public interface AddApplicationScenario {
}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommand.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommand.java
deleted file mode 100644
index 7547311..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommand.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.commands;
-
-import com.andrascsanyi.encyclopediagalactica.common.validation.ValidationConstraintsHelper;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.entities.ApplicationEntity;
-import com.andrascsanyi.encyclopediagalactica.document.mappers.ApplicationMapper;
-import com.andrascsanyi.encyclopediagalactica.document.repositories.ApplicationRepository;
-import com.andrascsanyi.encyclopediagalactica.document.validation.AddApplicationScenario;
-import jakarta.validation.ConstraintViolation;
-import jakarta.validation.Validator;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Set;
-
-@Service
-public class AddApplicationCommand {
-
- private final ApplicationMapper applicationMapper;
-
- private final ApplicationRepository applicationRepository;
-
- private final Validator validator;
-
- @Autowired
- public AddApplicationCommand(
- ApplicationMapper applicationMapper,
- ApplicationRepository applicationRepository,
- Validator validator) {
- this.applicationMapper = applicationMapper;
- this.applicationRepository = applicationRepository;
- this.validator = validator;
- }
-
- public ApplicationOutput addApplication(ApplicationInput applicationInput)
- throws AddApplicationCommandException {
- try {
- validateInputAndThrow(applicationInput);
- ApplicationEntity input = applicationMapper.toApplicationEntity(applicationInput);
- ApplicationEntity applicationEntity = applicationRepository.save(input);
- return applicationMapper.toApplicationOutput(applicationEntity);
- } catch (Throwable e) {
- throw new AddApplicationCommandException(e.getMessage(), e);
- }
- }
-
- private void validateInputAndThrow(ApplicationInput applicationInput)
- throws AddApplicationCommandException {
- if (applicationInput == null) {
- throw new AddApplicationCommandException("Application input is null");
- }
-
- Set> validationResult =
- validator.validate(applicationInput, AddApplicationScenario.class);
-
- if (!validationResult.isEmpty()) {
- String violations = ValidationConstraintsHelper.getViolationsAsString(validationResult);
- throw new AddApplicationCommandException(violations);
- }
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationsCommand.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationsCommand.java
deleted file mode 100644
index 0aca496..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationsCommand.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.commands;
-
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.entities.ApplicationEntity;
-import com.andrascsanyi.encyclopediagalactica.document.mappers.ApplicationMapper;
-import com.andrascsanyi.encyclopediagalactica.document.repositories.ApplicationRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Service
-public class GetAllApplicationsCommand {
-
- @Autowired
- private ApplicationMapper applicationMapper;
-
- @Autowired
- private ApplicationRepository applicationRepository;
-
- public List getAllApplications() throws GetAllApplicationsCommandException {
- try {
- List result = new ArrayList<>();
- applicationRepository.findAll().forEach(result::add);
- return applicationMapper.toApplicationOutputList(result);
- } catch (Exception e) {
- throw new GetAllApplicationsCommandException(
- "Error happened while executing " + GetAllApplicationsCommand.class.getName(),
- e
- );
- }
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommand.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommand.java
new file mode 100644
index 0000000..b68e309
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommand.java
@@ -0,0 +1,23 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.commands;
+
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import com.andrascsanyi.encyclopediagalactica.document.core.repositories.ApplicationRepository;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class AddApplicationCommand {
+
+ private final ApplicationRepository applicationRepository;
+
+ public Application addApplication(Application applicationEntityInput)
+ throws AddApplicationCommandException {
+ try {
+ Application applicationEntity = applicationRepository.save(applicationEntityInput);
+ return applicationEntity;
+ } catch (Throwable e) {
+ throw new AddApplicationCommandException(e.getMessage(), e);
+ }
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommandException.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommandException.java
similarity index 90%
rename from src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommandException.java
rename to src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommandException.java
index 70514a0..09de930 100644
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommandException.java
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommandException.java
@@ -1,4 +1,4 @@
-package com.andrascsanyi.encyclopediagalactica.document.commands;
+package com.andrascsanyi.encyclopediagalactica.document.core.commands;
public class AddApplicationCommandException extends Exception {
public AddApplicationCommandException() {}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationsCommand.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationsCommand.java
new file mode 100644
index 0000000..79ea686
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationsCommand.java
@@ -0,0 +1,29 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.commands;
+
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import com.andrascsanyi.encyclopediagalactica.document.core.repositories.ApplicationRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class GetAllApplicationsCommand {
+
+ @Autowired
+ private ApplicationRepository applicationRepository;
+
+ public List getAllApplications() throws GetAllApplicationsCommandException {
+ try {
+ List result = new ArrayList<>();
+ applicationRepository.findAll().forEach(result::add);
+ return result;
+ } catch (Exception e) {
+ throw new GetAllApplicationsCommandException(
+ "Error happened while executing " + GetAllApplicationsCommand.class.getName(),
+ e
+ );
+ }
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationsCommandException.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationsCommandException.java
similarity index 90%
rename from src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationsCommandException.java
rename to src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationsCommandException.java
index 2d18233..0761f0d 100644
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationsCommandException.java
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationsCommandException.java
@@ -1,4 +1,4 @@
-package com.andrascsanyi.encyclopediagalactica.document.commands;
+package com.andrascsanyi.encyclopediagalactica.document.core.commands;
public class GetAllApplicationsCommandException extends Exception {
public GetAllApplicationsCommandException() {
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/entities/Application.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/entities/Application.java
new file mode 100644
index 0000000..1221f14
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/entities/Application.java
@@ -0,0 +1,68 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.entities;
+
+import com.andrascsanyi.beanvalidatorextensions.LongValueMustBe;
+import com.andrascsanyi.beanvalidatorextensions.TrimmedNotBlank;
+import com.andrascsanyi.beanvalidatorextensions.TrimmedNotEmpty;
+import com.andrascsanyi.beanvalidatorextensions.TrimmedSize;
+import com.andrascsanyi.encyclopediagalactica.document.core.validation.AddApplicationEntityScenario;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * The {@link Application} defines a domain within the Encyclopedia Galactica system.
+ *
+ * A usage domain describes a set of usage like:
+ *
+ *
+ * - Starmap
+ * - Finance
+ *
+ */
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "application")
+public class Application {
+
+ /**
+ * The unique identifier of the entity.
+ */
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ @LongValueMustBe(mustBe = 0L, groups = {AddApplicationEntityScenario.class})
+ private Long id;
+
+ /**
+ * The name of the domain.
+ */
+ @Column(name = "name")
+ @NotNull(message = "Name cannot be null")
+ @TrimmedNotBlank(groups = AddApplicationEntityScenario.class)
+ @TrimmedNotEmpty(groups = AddApplicationEntityScenario.class)
+ @TrimmedSize(min = 3, max = 255, groups = AddApplicationEntityScenario.class)
+ private String name;
+
+ /**
+ * The description of the domain.
+ */
+ @Column(name = "description")
+ @NotNull(message = "Description cannot be null.")
+ @TrimmedNotBlank(groups = AddApplicationEntityScenario.class)
+ @TrimmedNotEmpty(groups = AddApplicationEntityScenario.class)
+ @TrimmedSize(min = 3, max = 255, groups = AddApplicationEntityScenario.class)
+ private String description;
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/repositories/ApplicationRepository.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/repositories/ApplicationRepository.java
new file mode 100644
index 0000000..ba07ad6
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/repositories/ApplicationRepository.java
@@ -0,0 +1,7 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.repositories;
+
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import org.springframework.data.repository.CrudRepository;
+
+public interface ApplicationRepository extends CrudRepository {
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/AddApplicationScenario.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/AddApplicationScenario.java
new file mode 100644
index 0000000..d10eb38
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/AddApplicationScenario.java
@@ -0,0 +1,46 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.scenarios;
+
+import com.andrascsanyi.beanvalidatorextensions.ValidationConstraintsHelper;
+import com.andrascsanyi.encyclopediagalactica.document.core.commands.AddApplicationCommand;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import com.andrascsanyi.encyclopediagalactica.document.core.validation.AddApplicationEntityScenario;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validator;
+import lombok.AllArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.util.Set;
+
+@Service
+@AllArgsConstructor
+public class AddApplicationScenario {
+
+ private final AddApplicationCommand addApplicationCommand;
+ private final Validator validator;
+ private final Logger log = LoggerFactory.getLogger(AddApplicationScenario.class);
+
+ public Application execute(Application applicationEntity) {
+
+ try {
+ validateInput(applicationEntity);
+ return addApplicationCommand.addApplication(applicationEntity);
+ } catch (Throwable t) {
+
+ String errorMessage = String.format("Failed to add application: %s", applicationEntity);
+ log.error(errorMessage, t);
+ throw new AddApplicationScenarioException(errorMessage, t);
+ }
+ }
+
+ private void validateInput(Application applicationEntity) {
+ Set> violations = validator.validate(
+ applicationEntity,
+ AddApplicationEntityScenario.class);
+ if (!violations.isEmpty()) {
+ String error = ValidationConstraintsHelper.getViolationsAsString(violations);
+ throw new AddApplicationScenarioException(error);
+ }
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/AddApplicationScenarioException.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/AddApplicationScenarioException.java
new file mode 100644
index 0000000..6ab8d7f
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/AddApplicationScenarioException.java
@@ -0,0 +1,22 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.scenarios;
+
+public class AddApplicationScenarioException extends RuntimeException {
+ public AddApplicationScenarioException() {
+ }
+
+ public AddApplicationScenarioException(String message) {
+ super(message);
+ }
+
+ public AddApplicationScenarioException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public AddApplicationScenarioException(Throwable cause) {
+ super(cause);
+ }
+
+ public AddApplicationScenarioException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/GetAllApplicationsScenario.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/GetAllApplicationsScenario.java
new file mode 100644
index 0000000..6e34d21
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/GetAllApplicationsScenario.java
@@ -0,0 +1,29 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.scenarios;
+
+import com.andrascsanyi.encyclopediagalactica.document.core.commands.GetAllApplicationsCommand;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import lombok.AllArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@AllArgsConstructor
+public class GetAllApplicationsScenario {
+
+ private final GetAllApplicationsCommand getAllApplicationsCommand;
+ private final Logger log = LoggerFactory.getLogger(GetAllApplicationsScenario.class);
+
+ public List execute() {
+ try {
+ return getAllApplicationsCommand.getAllApplications();
+ } catch (Throwable t) {
+ log.error("Error while executing getAllApplicationsCommand", t);
+ throw new GetAllApplicationsScenarioException(
+ "Error while executing getAllApplicationsCommand", t
+ );
+ }
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/GetAllApplicationsScenarioException.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/GetAllApplicationsScenarioException.java
new file mode 100644
index 0000000..89adfcc
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/scenarios/GetAllApplicationsScenarioException.java
@@ -0,0 +1,22 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.scenarios;
+
+public class GetAllApplicationsScenarioException extends RuntimeException {
+ public GetAllApplicationsScenarioException() {
+ }
+
+ public GetAllApplicationsScenarioException(String message) {
+ super(message);
+ }
+
+ public GetAllApplicationsScenarioException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public GetAllApplicationsScenarioException(Throwable cause) {
+ super(cause);
+ }
+
+ public GetAllApplicationsScenarioException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/validation/AddApplicationEntityScenario.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/validation/AddApplicationEntityScenario.java
new file mode 100644
index 0000000..37fff5c
--- /dev/null
+++ b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/core/validation/AddApplicationEntityScenario.java
@@ -0,0 +1,6 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.validation;
+
+import jakarta.validation.groups.Default;
+
+public interface AddApplicationEntityScenario extends Default {
+}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/entities/ApplicationEntity.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/entities/ApplicationEntity.java
deleted file mode 100644
index 298d5eb..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/entities/ApplicationEntity.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.entities;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-/**
- * The {@link ApplicationEntity} defines a domain within the Encyclopedia
- * Galactica system.
- *
- * A usage domain describes a set of usage like:
- *
- *
- * - Starmap
- * - Finance
- *
- *
- */
-@Getter
-@Setter
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Entity
-@Table(name = "application")
-public class ApplicationEntity {
-
- /**
- * The unique identifier of the entity.
- */
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- @Column(name = "id")
- private Long id;
-
- /**
- * The name of the domain.
- */
- @Column(name = "name")
- private String name;
-
- /**
- * The description of the domain.
- */
- @Column(name = "description")
- private String description;
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/mappers/ApplicationMapper.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/mappers/ApplicationMapper.java
deleted file mode 100644
index 249ac29..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/mappers/ApplicationMapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.mappers;
-
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.entities.ApplicationEntity;
-import org.mapstruct.BeanMapping;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.ReportingPolicy;
-
-import java.util.List;
-
-@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.WARN)
-public interface ApplicationMapper {
-
- @Mapping(source = "id", target = "id")
- @Mapping(source = "name", target = "name")
- @Mapping(source = "description", target = "description")
- @BeanMapping(ignoreByDefault = true)
- ApplicationEntity toApplicationEntity(ApplicationInput applicationInput);
-
- @Mapping(source = "id", target = "id")
- @Mapping(source = "name", target = "name")
- @Mapping(source = "description", target = "description")
- @BeanMapping(ignoreByDefault = true)
- ApplicationOutput toApplicationOutput(ApplicationEntity applicationEntity);
-
- default List toApplicationOutputList(List result) {
- return result.stream().map(this::toApplicationOutput).toList();
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/repositories/ApplicationRepository.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/repositories/ApplicationRepository.java
deleted file mode 100644
index 61c07f2..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/repositories/ApplicationRepository.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.repositories;
-
-import com.andrascsanyi.encyclopediagalactica.document.entities.ApplicationEntity;
-import org.springframework.data.repository.CrudRepository;
-
-public interface ApplicationRepository extends CrudRepository {
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSaga.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSaga.java
deleted file mode 100644
index c3ea94c..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSaga.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.sagas;
-
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationResponse;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.DocumentErrorOutput;
-import com.andrascsanyi.encyclopediagalactica.document.commands.AddApplicationCommand;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class AddApplicationSaga {
-
- @Autowired private AddApplicationCommand addApplicationCommand;
-
- private static final Logger log = LoggerFactory.getLogger(AddApplicationSaga.class);
-
- public ApplicationResponse execute(ApplicationInput input) {
- try {
- return addApplicationCommand.addApplication(input);
- } catch (Exception e) {
-
- StringBuilder builder = new StringBuilder();
- builder.append("Error happened while executing ")
- .append(AddApplicationSaga.class.getSimpleName());
-
- return DocumentErrorOutput.builder()
- .message(builder.toString())
- .errorDetails(e.toString())
- .build();
- }
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetAllApplicationsSaga.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetAllApplicationsSaga.java
deleted file mode 100644
index 8abb5c0..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetAllApplicationsSaga.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.sagas;
-
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationListOutput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationResponse;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.DocumentErrorOutput;
-import com.andrascsanyi.encyclopediagalactica.document.commands.GetAllApplicationsCommand;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class GetAllApplicationsSaga {
-
- @Autowired private GetAllApplicationsCommand getAllApplicationsCommand;
-
- public ApplicationResponse execute() {
- try {
- List applications = getAllApplicationsCommand.getAllApplications();
- return ApplicationListOutput.builder().applicationList(applications).build();
- } catch (Exception e) {
- StringBuilder b = new StringBuilder();
- b.append("Error happened while executing ").append(GetAllApplicationsCommand.class);
-
- return DocumentErrorOutput.builder()
- .message(b.toString())
- .errorDetails(e.toString())
- .build();
- }
- }
-}
diff --git a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/validation/AddApplicationScenario.java b/src/main/java/com/andrascsanyi/encyclopediagalactica/document/validation/AddApplicationScenario.java
deleted file mode 100644
index 763f0d7..0000000
--- a/src/main/java/com/andrascsanyi/encyclopediagalactica/document/validation/AddApplicationScenario.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.validation;
-
-import jakarta.validation.groups.Default;
-
-public interface AddApplicationScenario extends Default {
-}
diff --git a/src/main/resources/graphql/document/entities/application_list_output.graphqls b/src/main/resources/graphql/document/entities/application_list_output.graphqls
index b9b9a9d..d0f108e 100644
--- a/src/main/resources/graphql/document/entities/application_list_output.graphqls
+++ b/src/main/resources/graphql/document/entities/application_list_output.graphqls
@@ -6,5 +6,5 @@ type ApplicationListOutput {
"""
Items of result.
"""
- applicationList: [ApplicationOutput!]!
+ applicationList: [ApplicationListOutputItem!]!
}
diff --git a/src/main/resources/graphql/document/entities/application_list_output_item.graphqls b/src/main/resources/graphql/document/entities/application_list_output_item.graphqls
new file mode 100644
index 0000000..16c6e0e
--- /dev/null
+++ b/src/main/resources/graphql/document/entities/application_list_output_item.graphqls
@@ -0,0 +1,20 @@
+"""
+The list output entity representing Application entity related operations result.
+"""
+type ApplicationListOutputItem {
+
+ """
+ The unique identifier of the entity.
+ """
+ id: ID!
+
+ """
+ The name of the entity.
+ """
+ name: String
+
+ """
+ The description field is the place to provide further details about the entity.
+ """
+ description: String
+}
diff --git a/src/main/resources/graphql/document/applicationSchema.graphqls b/src/main/resources/graphql/document/schema.graphqls
similarity index 61%
rename from src/main/resources/graphql/document/applicationSchema.graphqls
rename to src/main/resources/graphql/document/schema.graphqls
index 57aeab2..f6fa840 100644
--- a/src/main/resources/graphql/document/applicationSchema.graphqls
+++ b/src/main/resources/graphql/document/schema.graphqls
@@ -1,7 +1,8 @@
-union ApplicationResponse = ApplicationOutput | ApplicationListOutput | DocumentErrorOutput
+union ApplicationResponse = ApplicationOutput | DocumentErrorOutput
+union ApplicationListResponse = ApplicationListOutput | DocumentErrorOutput
extend type Query {
- getApplications: ApplicationResponse!,
+ getApplications: ApplicationListResponse!,
getApplication(id: Int!): ApplicationResponse!
}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeGreaterOrEqualToOneEntity.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeGreaterOrEqualToOneEntity.java
deleted file mode 100644
index 5df3964..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeGreaterOrEqualToOneEntity.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.common.validation.LongAsStringMustBeGreaterOrEqualToOne;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-public class LongAsStringMustBeGreaterOrEqualToOneEntity {
-
- @LongAsStringMustBeGreaterOrEqualToOne
- private String id;
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeGreaterOrEqualToOneTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeGreaterOrEqualToOneTests.java
deleted file mode 100644
index 3b6dcb4..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeGreaterOrEqualToOneTests.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import jakarta.validation.Validator;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.stream.Stream;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class LongAsStringMustBeGreaterOrEqualToOneTests extends EncyclopediaGalacticaApplicationBaseTest {
-
- @Autowired
- private Validator validator;
-
- public static Stream testData() {
- return Stream.of(
- Arguments.of(LongAsStringMustBeGreaterOrEqualToOneEntity.builder().id("0").build(), 1),
- Arguments.of(LongAsStringMustBeGreaterOrEqualToOneEntity.builder().id("1").build(), 0),
- Arguments.of(LongAsStringMustBeGreaterOrEqualToOneEntity.builder().id(null).build(), 0),
- Arguments.of(LongAsStringMustBeGreaterOrEqualToOneEntity.builder().id("").build(), 0),
- Arguments.of(LongAsStringMustBeGreaterOrEqualToOneEntity.builder().id(" ").build(), 0),
- Arguments.of(LongAsStringMustBeGreaterOrEqualToOneEntity.builder().id("-1").build(), 1)
- );
- }
-
- @ParameterizedTest
- @MethodSource("testData")
- public void test(LongAsStringMustBeGreaterOrEqualToOneEntity e, long expected) {
-
- assertThat(validator.validate(e).size()).isEqualTo(expected);
- }
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeZeroEntity.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeZeroEntity.java
deleted file mode 100644
index b5c53ae..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeZeroEntity.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.common.validation.LongAsStringMustBeZero;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Builder
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-public class LongAsStringMustBeZeroEntity {
-
- @LongAsStringMustBeZero
- private String id;
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeZeroTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeZeroTests.java
deleted file mode 100644
index e1ad421..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/LongAsStringMustBeZeroTests.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import jakarta.validation.Validator;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.stream.Stream;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class LongAsStringMustBeZeroTests extends EncyclopediaGalacticaApplicationBaseTest {
-
- public static Stream testData() {
- return Stream.of(
- Arguments.of(LongAsStringMustBeZeroEntity.builder().id("0").build(), 0),
- Arguments.of(LongAsStringMustBeZeroEntity.builder().id("1").build(), 1),
- Arguments.of(LongAsStringMustBeZeroEntity.builder().id(null).build(), 0),
- Arguments.of(LongAsStringMustBeZeroEntity.builder().id("").build(), 0),
- Arguments.of(LongAsStringMustBeZeroEntity.builder().id(" ").build(), 0),
- Arguments.of(LongAsStringMustBeZeroEntity.builder().id("-1").build(), 0)
- );
- }
-
- @Autowired
- private Validator validator;
-
- @ParameterizedTest
- @MethodSource("testData")
- public void test(LongAsStringMustBeZeroEntity e, Integer expected) {
- assertThat(validator.validate(e).size()).isGreaterThanOrEqualTo(expected);
- }
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotBlankEntity.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotBlankEntity.java
deleted file mode 100644
index f45b5cb..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotBlankEntity.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedNotBlank;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
-public class TrimmedNotBlankEntity {
-
- @TrimmedNotBlank
- private String id;
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotBlankTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotBlankTests.java
deleted file mode 100644
index 9849428..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotBlankTests.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import jakarta.validation.Validator;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.stream.Stream;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class TrimmedNotBlankTests extends EncyclopediaGalacticaApplicationBaseTest {
-
- @Autowired
- private Validator validator;
-
- public static Stream testData() {
- return Stream.of(
- Arguments.of(TrimmedNotBlankEntity.builder().id("").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" ").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" ").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" ").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" \t ").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" \n ").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" \r ").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" \f ").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" \s ").build(), 1),
- Arguments.of(TrimmedNotBlankEntity.builder().id("a").build(), 0),
- Arguments.of(TrimmedNotBlankEntity.builder().id("a ").build(), 0),
- Arguments.of(TrimmedNotBlankEntity.builder().id("a ").build(), 0),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" a ").build(), 0),
- Arguments.of(TrimmedNotBlankEntity.builder().id(" a ").build(), 0)
- );
- }
-
- @ParameterizedTest
- @MethodSource("testData")
- public void test(TrimmedNotBlankEntity input, int expected) {
-
- assertThat(validator.validate(input).size())
- .withFailMessage("string value: -" + input.getId() + "-")
- .isGreaterThanOrEqualTo(expected);
- }
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotEmptyEntity.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotEmptyEntity.java
deleted file mode 100644
index 342025b..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotEmptyEntity.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedNotEmtpy;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
-public class TrimmedNotEmptyEntity {
-
- @TrimmedNotEmtpy
- private String id;
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotEmptyTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotEmptyTests.java
deleted file mode 100644
index 42d4490..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedNotEmptyTests.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import jakarta.validation.Validator;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.stream.Stream;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class TrimmedNotEmptyTests extends EncyclopediaGalacticaApplicationBaseTest {
-
- @Autowired
- private Validator validator;
-
- public static Stream testData() {
- return Stream.of(
- Arguments.of(TrimmedNotEmptyEntity.builder().id("").build(), 1),
- Arguments.of(TrimmedNotEmptyEntity.builder().id(" ").build(), 1),
- Arguments.of(TrimmedNotEmptyEntity.builder().id(" ").build(), 1),
- Arguments.of(TrimmedNotEmptyEntity.builder().id(" ").build(), 1),
- Arguments.of(TrimmedNotEmptyEntity.builder().id("a").build(), 0),
- Arguments.of(TrimmedNotEmptyEntity.builder().id("a ").build(), 0),
- Arguments.of(TrimmedNotEmptyEntity.builder().id("a ").build(), 0),
- Arguments.of(TrimmedNotEmptyEntity.builder().id(" a ").build(), 0),
- Arguments.of(TrimmedNotEmptyEntity.builder().id(" a ").build(), 0)
- );
- }
-
- @ParameterizedTest
- @MethodSource("testData")
- public void test(TrimmedNotEmptyEntity input, int expected) {
-
- assertThat(validator.validate(input).size())
- .withFailMessage("string value: -" + input.getId() + "-")
- .isGreaterThanOrEqualTo(expected);
- }
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedSizeEntity.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedSizeEntity.java
deleted file mode 100644
index 8c3619e..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedSizeEntity.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.common.validation.TrimmedSize;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
-public class TrimmedSizeEntity {
-
- @TrimmedSize(min = 3, max = 5)
- private String value;
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedSizeTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedSizeTests.java
deleted file mode 100644
index 92a7fd0..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/common/TrimmedSizeTests.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.common;
-
-import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import jakarta.validation.Validator;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.stream.Stream;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class TrimmedSizeTests extends EncyclopediaGalacticaApplicationBaseTest {
-
- @Autowired
- private Validator validator;
-
- public static Stream testData() {
- return Stream.of(
- // min
- Arguments.of(TrimmedSizeEntity.builder().value("qw").build(), 1),
- Arguments.of(TrimmedSizeEntity.builder().value("qw ").build(), 1),
- Arguments.of(TrimmedSizeEntity.builder().value(" qw").build(), 1),
- Arguments.of(TrimmedSizeEntity.builder().value(" qw ").build(), 1),
- Arguments.of(TrimmedSizeEntity.builder().value("qww").build(), 0),
- // max
- Arguments.of(TrimmedSizeEntity.builder().value("qwwww").build(), 0),
- Arguments.of(TrimmedSizeEntity.builder().value("qwwww ").build(), 0),
- Arguments.of(TrimmedSizeEntity.builder().value(" qwwww").build(), 0),
- Arguments.of(TrimmedSizeEntity.builder().value(" qwwww ").build(), 0),
- Arguments.of(TrimmedSizeEntity.builder().value("qwwwww").build(), 1)
- );
- }
-
- @ParameterizedTest
- @MethodSource("testData")
- public void test(TrimmedSizeEntity input, int expectedSize) {
-
- assertThat(validator.validate(input).size())
- .withFailMessage("value: -" + input.getValue() + "-")
- .isGreaterThanOrEqualTo(expectedSize);
- }
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/AddApplicationEntityTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/AddApplicationGqlApiTests.java
similarity index 64%
rename from src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/AddApplicationEntityTests.java
rename to src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/AddApplicationGqlApiTests.java
index da4257f..eac28ec 100644
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/AddApplicationEntityTests.java
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/AddApplicationGqlApiTests.java
@@ -1,9 +1,10 @@
package com.andrascsanyi.encyclopediagalactica.document.api.graphql;
import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.testdata.AddApplicationScenarioInputValidationData;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.testdata.AddApplicationViaGraphqlApiScenarioInputValidationData;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ArgumentsSource;
@@ -14,7 +15,7 @@
import static org.assertj.core.api.Assertions.assertThat;
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
-public class AddApplicationEntityTests extends EncyclopediaGalacticaApplicationBaseTest {
+public class AddApplicationGqlApiTests extends EncyclopediaGalacticaApplicationBaseTest {
@Autowired
private HttpGraphQlTester graphQlTester;
@@ -23,25 +24,27 @@ public class AddApplicationEntityTests extends EncyclopediaGalacticaApplicationB
public void addEntity() {
ApplicationInput input = ApplicationInput.builder()
- .id("0")
- .name("test")
- .description("test")
+ .setId("0")
+ .setName("test")
+ .setDescription("test")
.build();
graphQlTester.documentName("document/addApplication")
.variable("input", input)
.execute()
.path("data.addApplication")
- .entity(ApplicationOutput.class)
+ .entity(ApplicationResponse.class)
.satisfies(result -> {
- assertThat(result.getId()).isNotEqualTo("0").isNotBlank().isNotEmpty();
- assertThat(result.getName()).isEqualTo(input.getName());
- assertThat(result.getDescription()).isEqualTo(input.getDescription());
+ assertThat(result).isInstanceOf(ApplicationResponse.class);
+ ApplicationOutput r = (ApplicationOutput) result;
+ assertThat(r.getId()).isNotEqualTo("0").isNotBlank().isNotEmpty();
+ assertThat(r.getName()).isEqualTo(input.getName());
+ assertThat(r.getDescription()).isEqualTo(input.getDescription());
});
}
@ParameterizedTest
- @ArgumentsSource(AddApplicationScenarioInputValidationData.class)
+ @ArgumentsSource(AddApplicationViaGraphqlApiScenarioInputValidationData.class)
public void addEntityInputValidation(ApplicationInput data) {
graphQlTester.documentName("document/addApplication")
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/GetAllApplicationsGqlApiTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/GetAllApplicationsGqlApiTests.java
new file mode 100644
index 0000000..d71d7fd
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/graphql/GetAllApplicationsGqlApiTests.java
@@ -0,0 +1,71 @@
+package com.andrascsanyi.encyclopediagalactica.document.api.graphql;
+
+import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationResponse;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.graphql.test.tester.HttpGraphQlTester;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.annotation.DirtiesContext.ClassMode;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
+public class GetAllApplicationsGqlApiTests extends EncyclopediaGalacticaApplicationBaseTest {
+
+ @Autowired
+ private HttpGraphQlTester tester;
+
+ @Test
+ public void testWhenTheDatabaseIsEmpty() {
+
+ tester.documentName("document/getApplications")
+ .execute()
+ .path("data.getApplications")
+ .entity(ApplicationListResponse.class)
+ .satisfies(
+ result -> {
+ assertThat(result).isInstanceOf(ApplicationListResponse.class);
+ ApplicationListOutput r = (ApplicationListOutput) result;
+ assertThat(r.getApplicationList()).isEmpty();
+ });
+ }
+
+ @Test
+ public void testWhenTheDatabaseHasMultipleItems() {
+ for (int i = 0; i < 2; i++) {
+ ApplicationInput input = ApplicationInput.builder()
+ .setId("0")
+ .setName("name" + i)
+ .setDescription("description" + i)
+ .build();
+
+ tester.documentName("document/addApplication")
+ .variable("input", input)
+ .execute()
+ .path("data.addApplication")
+ .entity(ApplicationResponse.class)
+ .satisfies(result -> {
+ assertThat(result).isInstanceOf(ApplicationResponse.class);
+ ApplicationOutput r = (ApplicationOutput) result;
+ assertThat(r.getName()).isEqualTo(input.getName());
+ assertThat(r.getDescription()).isEqualTo(input.getDescription());
+ });
+ }
+
+ tester.documentName("document/getApplications")
+ .execute()
+ .path("data.getApplications")
+ .entity(ApplicationListResponse.class)
+ .satisfies(
+ result -> {
+ assertThat(result).isInstanceOf(ApplicationListResponse.class);
+ ApplicationListOutput r = (ApplicationListOutput) result;
+ assertThat(r.getApplicationList().size()).isEqualTo(2);
+ });
+ }
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSagaTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/sagas/AddApplicationSagaTests.java
similarity index 67%
rename from src/test/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSagaTests.java
rename to src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/sagas/AddApplicationSagaTests.java
index b152aa8..0af00ed 100644
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/sagas/AddApplicationSagaTests.java
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/sagas/AddApplicationSagaTests.java
@@ -1,20 +1,21 @@
-package com.andrascsanyi.encyclopediagalactica.document.sagas;
+package com.andrascsanyi.encyclopediagalactica.document.api.sagas;
import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationListOutput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationResponse;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.DocumentErrorOutput;
-import com.andrascsanyi.encyclopediagalactica.document.testdata.AddApplicationScenarioInputValidationData;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.DocumentErrorOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas.AddApplicationSaga;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas.GetAllApplicationsSaga;
+import com.andrascsanyi.encyclopediagalactica.document.api.testdata.AddApplicationViaGraphqlApiScenarioInputValidationData;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ArgumentsSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
-import java.util.List;
-
import static org.assertj.core.api.Assertions.assertThat;
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@@ -27,7 +28,7 @@ public class AddApplicationSagaTests extends EncyclopediaGalacticaApplicationBas
private GetAllApplicationsSaga getAllApplicationsSaga;
@ParameterizedTest
- @ArgumentsSource(AddApplicationScenarioInputValidationData.class)
+ @ArgumentsSource(AddApplicationViaGraphqlApiScenarioInputValidationData.class)
public void inputValidation(ApplicationInput input) {
ApplicationResponse response = addApplicationSaga.execute(input);
@@ -37,11 +38,15 @@ public void inputValidation(ApplicationInput input) {
@Test
public void createApplication() {
- ApplicationInput input = ApplicationInput.builder().name("name").description("description").build();
+ ApplicationInput input = ApplicationInput.builder()
+ .setId("0")
+ .setName("name")
+ .setDescription("description")
+ .build();
ApplicationResponse res = addApplicationSaga.execute(input);
assertThat(res).isInstanceOf(ApplicationOutput.class);
- ApplicationResponse result = getAllApplicationsSaga.execute();
+ ApplicationListResponse result = getAllApplicationsSaga.execute();
assertThat(result).isInstanceOf(ApplicationListOutput.class);
ApplicationListOutput r = (ApplicationListOutput) result;
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetAllApplicationsSagaTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/sagas/GetAllApplicationsSagaTests.java
similarity index 58%
rename from src/test/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetAllApplicationsSagaTests.java
rename to src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/sagas/GetAllApplicationsSagaTests.java
index 19f7ef1..8702d6d 100644
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/sagas/GetAllApplicationsSagaTests.java
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/sagas/GetAllApplicationsSagaTests.java
@@ -1,68 +1,75 @@
-package com.andrascsanyi.encyclopediagalactica.document.sagas;
-
-import static org.assertj.core.api.Assertions.assertThat;
+package com.andrascsanyi.encyclopediagalactica.document.api.sagas;
import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationListOutput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationResponse;
-
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationListResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationResponse;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.DocumentErrorOutput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas.AddApplicationSaga;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.sagas.GetAllApplicationsSaga;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
-@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
-public class GetAllApplicationsSagaTests extends EncyclopediaGalacticaApplicationBaseTest {
-
- @Autowired private GetAllApplicationsSaga getAllApplicationsSaga;
-
- @Autowired private AddApplicationSaga addApplicationSaga;
+import static org.assertj.core.api.Assertions.assertThat;
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+public class GetAllApplicationsSagaTests extends EncyclopediaGalacticaApplicationBaseTest {
+
+ @Autowired
+ private GetAllApplicationsSaga getAllApplicationsSaga;
+
+ @Autowired
+ private AddApplicationSaga addApplicationSaga;
+
@Test
public void testWhenTheDatabaseIsEmpty() {
- ApplicationResponse result = getAllApplicationsSaga.execute();
+ ApplicationListResponse result = getAllApplicationsSaga.execute();
assertThat(result).isInstanceOf(ApplicationListOutput.class);
ApplicationListOutput r = (ApplicationListOutput) result;
assertThat(r.getApplicationList()).isEmpty();
}
-
+
@Test
public void testWhenThereIsOnlyOneItemInTheDatabase() {
- ApplicationInput input =
- ApplicationInput.builder().name("name").description("description").build();
+ ApplicationInput input = ApplicationInput.builder()
+ .setName("name")
+ .setDescription("description")
+ .build();
ApplicationResponse recordingResult = addApplicationSaga.execute(input);
assertThat(recordingResult).isInstanceOf(ApplicationOutput.class);
-
- ApplicationResponse r = getAllApplicationsSaga.execute();
-
+
+ ApplicationListResponse r = getAllApplicationsSaga.execute();
+
assertThat(r).isInstanceOf(ApplicationListOutput.class);
+ assertThat(r).isNotInstanceOf(DocumentErrorOutput.class);
ApplicationListOutput res = (ApplicationListOutput) r;
-
+
assertThat(res.getApplicationList()).isNotEmpty();
assertThat(res.getApplicationList().size()).isEqualTo(1);
assertThat(res.getApplicationList().get(0).getId()).isNotEqualTo("0");
assertThat(res.getApplicationList().get(0).getName()).isEqualTo(input.getName());
assertThat(res.getApplicationList().get(0).getDescription())
- .isEqualTo(input.getDescription());
+ .isEqualTo(input.getDescription());
}
-
+
@Test
public void testWhenThereAreMultipleItemsIntTheDatabase() {
for (int i = 0; i < 2; i++) {
- ApplicationInput input =
- ApplicationInput.builder()
- .name("name" + i)
- .description("description" + i)
- .build();
+ ApplicationInput input = ApplicationInput.builder()
+ .setName("name" + i)
+ .setDescription("description" + i)
+ .build();
ApplicationResponse recordingResult = addApplicationSaga.execute(input);
assertThat(recordingResult).isInstanceOf(ApplicationOutput.class);
}
-
- ApplicationResponse r = getAllApplicationsSaga.execute();
+
+ ApplicationListResponse r = getAllApplicationsSaga.execute();
assertThat(r).isInstanceOf(ApplicationListOutput.class);
ApplicationListOutput res = (ApplicationListOutput) r;
-
+
assertThat(res.getApplicationList()).isNotEmpty();
assertThat(res.getApplicationList().size()).isEqualTo(2);
}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/testdata/AddApplicationViaGraphqlApiScenarioInputValidationData.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/testdata/AddApplicationViaGraphqlApiScenarioInputValidationData.java
new file mode 100644
index 0000000..4d45253
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/testdata/AddApplicationViaGraphqlApiScenarioInputValidationData.java
@@ -0,0 +1,59 @@
+package com.andrascsanyi.encyclopediagalactica.document.api.testdata;
+
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.stream.Stream;
+
+/**
+ * Test data for testing input validation of {@link AddApplicationScenario}.
+ *
+ * The provided test data includes only invalid input parameters.
+ */
+public class AddApplicationViaGraphqlApiScenarioInputValidationData implements ArgumentsProvider {
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) throws Exception {
+ return Stream.of(
+ Arguments.of(ApplicationInput.builder().setId("1").setName("name").setDescription("desc").build()),
+
+ Arguments.of(ApplicationInput.builder().setId("0").setName(null).setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName(" ").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName(" ").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName(" ").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("a").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("ab").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("ab ").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName(" ab ").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName(" ab ").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("a\r").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("aa\r").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("a\t").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("aa\t").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("a\f").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("aa\f").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("a\s").setDescription("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("aa\s").setDescription("desc").build()),
+
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription(" ").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription(" ").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription(" ").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("a").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("ab").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("ab ").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription(" ab ").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription(" ab ").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("a\r").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("aa\r").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("a\t").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("aa\t").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("a\f").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("aa\f").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("a\s").setName("desc").build()),
+ Arguments.of(ApplicationInput.builder().setId("0").setDescription("aa\s").setName("desc").build()));
+ }
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/validation/AddApplicationScenarioValidationTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/validation/AddApplicationScenarioValidationTests.java
new file mode 100644
index 0000000..d63d92a
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/api/validation/AddApplicationScenarioValidationTests.java
@@ -0,0 +1,66 @@
+package com.andrascsanyi.encyclopediagalactica.document.api.validation;
+
+import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.entities.ApplicationInput;
+import com.andrascsanyi.encyclopediagalactica.document.api.graphql.scenarios.AddApplicationScenario;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validator;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
+public class AddApplicationScenarioValidationTests extends EncyclopediaGalacticaApplicationBaseTest {
+
+ @Autowired
+ private Validator validator;
+
+ public static Stream testData() {
+ return Stream.of(
+ // id
+ Arguments.of(ApplicationInput.builder().setId("").setName("asd").setDescription("asd").build(), 0),
+ Arguments.of(ApplicationInput.builder().setId(" ").setName("asd").setDescription("asd").build(), 0),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription("asd").build(), 0),
+ Arguments.of(ApplicationInput.builder().setId("1").setName("asd").setDescription("asd").build(), 1),
+ // name
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription("asd").build(), 0),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("").setDescription("asd").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("a").setDescription("asd").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("as").setDescription("asd").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("as ").setDescription("asd").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName(" as").setDescription("asd").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName(" ").setDescription("asd").build(), 1),
+ // description
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription("asd").build(), 0),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription("").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription("a").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription("as").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription("as ").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription(" as").build(), 1),
+ Arguments.of(ApplicationInput.builder().setId("0").setName("asd").setDescription(" ").build(), 1));
+ }
+
+ @ParameterizedTest
+ @MethodSource("testData")
+ public void test(ApplicationInput applicationInput, Integer errorVolume) {
+ Set> constraintViolations = validator.validate(
+ applicationInput,
+ AddApplicationScenario.class);
+
+ StringBuilder builder = new StringBuilder();
+ builder.append("id: -").append(applicationInput.getId()).append("-").append("\n");
+ builder.append("name: -").append(applicationInput.getName()).append("-").append("\n");
+ builder.append("description: -").append(applicationInput.getDescription()).append("-").append("\n");
+
+ assertThat(constraintViolations.size())
+ .withFailMessage(builder.toString())
+ .isGreaterThanOrEqualTo(errorVolume);
+ }
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommandTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommandTests.java
deleted file mode 100644
index 68a74aa..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/commands/AddApplicationCommandTests.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.commands;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
-import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
-import com.andrascsanyi.encyclopediagalactica.document.testdata.AddApplicationScenarioInputValidationData;
-
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.annotation.DirtiesContext;
-
-import java.util.List;
-
-@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
-public class AddApplicationCommandTests extends EncyclopediaGalacticaApplicationBaseTest {
-
- @Autowired private AddApplicationCommand addApplicationCommand;
-
- @Autowired private GetAllApplicationsCommand getAllApplicationsCommand;
-
- @ParameterizedTest
- @ArgumentsSource(AddApplicationScenarioInputValidationData.class)
- public void inputValidation(ApplicationInput input) {
- assertThatThrownBy(
- () -> {
- addApplicationCommand.addApplication(input);
- })
- .isInstanceOf(AddApplicationCommandException.class);
- }
-
- @Test
- public void createApplication()
- throws GetAllApplicationsCommandException, AddApplicationCommandException {
- ApplicationInput input =
- ApplicationInput.builder().id("0").name("name").description("desc").build();
- addApplicationCommand.addApplication(input);
- List result =
- getAllApplicationsCommand.getAllApplications().stream().toList();
-
- assertThat(result.size()).isEqualTo(1);
- assertThat(result.get(0).getId()).isNotEmpty().isNotBlank().isNotEqualTo("0");
- assertThat(result.get(0).getName()).isEqualTo(input.getName());
- assertThat(result.get(0).getDescription()).isEqualTo(input.getDescription());
- }
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/DocumentCoreTestSuite.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/DocumentCoreTestSuite.java
new file mode 100644
index 0000000..f9f2606
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/DocumentCoreTestSuite.java
@@ -0,0 +1,10 @@
+package com.andrascsanyi.encyclopediagalactica.document.core;
+
+import org.junit.jupiter.api.Tag;
+import org.junit.platform.suite.api.SelectPackages;
+
+@SelectPackages("com.andrascsanyi.encyclopediagalactica.document.core.commands")
+@Tag("document")
+@Tag("core")
+public class DocumentCoreTestSuite {
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommandTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommandTests.java
new file mode 100644
index 0000000..fb960ae
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/AddApplicationCommandTests.java
@@ -0,0 +1,41 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.commands;
+
+import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@Tag("document")
+@Tag("core")
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+public class AddApplicationCommandTests extends EncyclopediaGalacticaApplicationBaseTest {
+
+ @Autowired
+ private AddApplicationCommand addApplicationCommand;
+
+ @Autowired
+ private GetAllApplicationsCommand getAllApplicationsCommand;
+
+ @Test
+ public void createApplication()
+ throws GetAllApplicationsCommandException, AddApplicationCommandException {
+ Application input = Application.builder()
+ .id(0L)
+ .name("name")
+ .description("desc")
+ .build();
+ addApplicationCommand.addApplication(input);
+ List result = getAllApplicationsCommand.getAllApplications().stream().toList();
+
+ assertThat(result.size()).isEqualTo(1);
+ assertThat(result.get(0).getId()).isNotEqualTo(0L);
+ assertThat(result.get(0).getName()).isEqualTo(input.getName());
+ assertThat(result.get(0).getDescription()).isEqualTo(input.getDescription());
+ }
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationCommandTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationCommandTests.java
similarity index 68%
rename from src/test/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationCommandTests.java
rename to src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationCommandTests.java
index 948a8b2..8672df9 100644
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/commands/GetAllApplicationCommandTests.java
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/commands/GetAllApplicationCommandTests.java
@@ -1,8 +1,8 @@
-package com.andrascsanyi.encyclopediagalactica.document.commands;
+package com.andrascsanyi.encyclopediagalactica.document.core.commands;
import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.output.ApplicationOutput;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
@@ -11,7 +11,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
public class GetAllApplicationCommandTests extends EncyclopediaGalacticaApplicationBaseTest {
@Autowired
@@ -20,40 +20,48 @@ public class GetAllApplicationCommandTests extends EncyclopediaGalacticaApplicat
@Autowired
private AddApplicationCommand addApplicationCommand;
+ @Tag("document")
+ @Tag("core")
@Test
public void testWhenTheDatabaseIsEmpty() throws GetAllApplicationsCommandException {
- List result = getAllApplicationsCommand.getAllApplications();
+ List result = getAllApplicationsCommand.getAllApplications();
assertThat(result).isEmpty();
}
+ @Tag("document")
+ @Tag("core")
@Test
public void testWhenOnlyASingleItemInTheDatabase() throws AddApplicationCommandException, GetAllApplicationsCommandException {
- ApplicationInput input = ApplicationInput.builder()
+ Application input = Application.builder()
+ .id(0L)
.name("name")
.description("description")
.build();
addApplicationCommand.addApplication(input);
- List resultList = getAllApplicationsCommand.getAllApplications();
+ List resultList = getAllApplicationsCommand.getAllApplications();
assertThat(resultList.size()).isEqualTo(1);
- assertThat(resultList.get(0).getId()).isGreaterThanOrEqualTo("1").isNotEqualTo("0");
+ assertThat(resultList.get(0).getId()).isGreaterThanOrEqualTo(1L).isNotEqualTo(0);
assertThat(resultList.get(0).getName()).isEqualTo(input.getName());
assertThat(resultList.get(0).getDescription()).isEqualTo(input.getDescription());
}
+ @Tag("document")
+ @Tag("core")
@Test
public void testWhenMultipleItemsInTheDatabase() throws AddApplicationCommandException, GetAllApplicationsCommandException {
for (int i = 0; i < 2; i++) {
- ApplicationInput input = ApplicationInput.builder()
+ Application input = Application.builder()
+ .id(0L)
.name("name" + i)
.description("description" + i)
.build();
addApplicationCommand.addApplication(input);
}
- List resultList = getAllApplicationsCommand.getAllApplications();
+ List resultList = getAllApplicationsCommand.getAllApplications();
assertThat(resultList.size()).isEqualTo(2);
}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/scenario/AddApplicationScenarioTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/scenario/AddApplicationScenarioTests.java
new file mode 100644
index 0000000..8819723
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/scenario/AddApplicationScenarioTests.java
@@ -0,0 +1,49 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.scenario;
+
+
+import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import com.andrascsanyi.encyclopediagalactica.document.core.scenarios.AddApplicationScenario;
+import com.andrascsanyi.encyclopediagalactica.document.core.scenarios.AddApplicationScenarioException;
+import com.andrascsanyi.encyclopediagalactica.document.core.testdata.AddApplicationEntityScenarioInputValidationTestData;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+public class AddApplicationScenarioTests extends EncyclopediaGalacticaApplicationBaseTest {
+
+ @Autowired
+ private AddApplicationScenario addApplicationScenario;
+
+ @Tag("document")
+ @Tag("core")
+ @ParameterizedTest
+ @ArgumentsSource(AddApplicationEntityScenarioInputValidationTestData.class)
+ public void testValidation(Application applicationEntity) {
+ assertThatThrownBy(() -> addApplicationScenario.execute(applicationEntity))
+ .isInstanceOf(AddApplicationScenarioException.class);
+ }
+
+ @Tag("document")
+ @Tag("core")
+ @Test
+ public void testAdding() {
+ Application entity = Application.builder()
+ .id(0L)
+ .name("name")
+ .description("description").build();
+
+ Application result = addApplicationScenario.execute(entity);
+
+ assertThat(result.getId()).isGreaterThanOrEqualTo(1);
+ assertThat(result.getName()).isEqualTo(entity.getName());
+ assertThat(result.getDescription()).isEqualTo(entity.getDescription());
+ }
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/scenario/GetAllApplicationsScenarioTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/scenario/GetAllApplicationsScenarioTests.java
new file mode 100644
index 0000000..c29f9bc
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/scenario/GetAllApplicationsScenarioTests.java
@@ -0,0 +1,66 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.scenario;
+
+import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import com.andrascsanyi.encyclopediagalactica.document.core.scenarios.AddApplicationScenario;
+import com.andrascsanyi.encyclopediagalactica.document.core.scenarios.GetAllApplicationsScenario;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+public class GetAllApplicationsScenarioTests extends EncyclopediaGalacticaApplicationBaseTest {
+
+ @Autowired
+ private GetAllApplicationsScenario getAllApplicationsScenario;
+
+ @Autowired
+ private AddApplicationScenario addApplicationScenario;
+
+ @Tag("document")
+ @Tag("core")
+ @Test
+ public void testWhenTheDatabaseIsEmpty() {
+ List applicationEntities = getAllApplicationsScenario.execute();
+ assertThat(applicationEntities).isEmpty();
+ }
+
+ @Tag("document")
+ @Tag("core")
+ @Test
+ public void testWhenTheDatabaseHasASingleElement() {
+ Application input = Application.builder()
+ .id(0L)
+ .name("name")
+ .description("description").build();
+
+ Application result = addApplicationScenario.execute(input);
+
+ List applicationEntities = getAllApplicationsScenario.execute();
+ assertThat(applicationEntities).hasSize(1);
+ assertThat(applicationEntities.get(0).getId()).isGreaterThanOrEqualTo(1);
+ assertThat(applicationEntities.get(0).getName()).isEqualTo(input.getName());
+ assertThat(applicationEntities.get(0).getDescription()).isEqualTo(input.getDescription());
+ }
+
+ @Tag("document")
+ @Tag("core")
+ @Test
+ public void testWhenTheDatabaseHasMultipleElements() {
+ for (int i = 0; i < 2; i++) {
+ Application input = Application.builder()
+ .id(0L)
+ .name("name" + i)
+ .description("description" + i).build();
+
+ Application result = addApplicationScenario.execute(input);
+ }
+ List applicationEntities = getAllApplicationsScenario.execute();
+ assertThat(applicationEntities).hasSize(2);
+ }
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/testdata/AddApplicationEntityScenarioInputValidationTestData.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/testdata/AddApplicationEntityScenarioInputValidationTestData.java
new file mode 100644
index 0000000..eb60981
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/testdata/AddApplicationEntityScenarioInputValidationTestData.java
@@ -0,0 +1,32 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.testdata;
+
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.stream.Stream;
+
+public class AddApplicationEntityScenarioInputValidationTestData implements ArgumentsProvider {
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) throws Exception {
+ return Stream.of(
+ Arguments.of(Application.builder().id(1L).name("asd").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name(null).description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("\t").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("\r").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("\n").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("as").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("as ").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name(" as ").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description(null).build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("\t").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("\r").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("\n").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("as ").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description(" as ").build())
+ );
+ }
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/validation/AddApplicationEntityScenarioValidationTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/validation/AddApplicationEntityScenarioValidationTests.java
new file mode 100644
index 0000000..56ba96d
--- /dev/null
+++ b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/core/validation/AddApplicationEntityScenarioValidationTests.java
@@ -0,0 +1,75 @@
+package com.andrascsanyi.encyclopediagalactica.document.core.validation;
+
+import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
+import com.andrascsanyi.encyclopediagalactica.document.core.entities.Application;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validator;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@Tag("document")
+@Tag("core")
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+public class AddApplicationEntityScenarioValidationTests extends EncyclopediaGalacticaApplicationBaseTest {
+
+ @Autowired
+ private Validator validator;
+
+ public static Stream data() {
+ return Stream.of(
+ Arguments.of(Application.builder().id(1L).name("asd").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name(null).description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("\t").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("\r").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("\n").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("as").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("as ").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name(" as ").description("asd").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description(null).build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("\t").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("\r").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("\n").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description("as ").build()),
+ Arguments.of(Application.builder().id(0L).name("asd").description(" as ").build())
+ );
+ }
+
+ @ParameterizedTest
+ @MethodSource("data")
+ public void testValidation(Application applicationEntity) {
+ Set> violations = validator.validate(
+ applicationEntity,
+ AddApplicationEntityScenario.class);
+
+ StringBuilder builder = new StringBuilder();
+ builder
+ .append("| Property Name | Property value | \n")
+ .append("|-------|--------------|\n")
+ .append("|id |").append(applicationEntity.getId()).append("| \n")
+ .append("|name: |").append(applicationEntity.getName()).append("| \n")
+ .append("|desc: |").append(applicationEntity.getDescription()).append("| \n")
+ .append("|----------|---------------|\n")
+ .append("|Constraint violations| \n");
+
+ if (!violations.isEmpty()) {
+ violations.forEach(i -> {
+ builder.append("|").append(i.getMessage()).append("|\n");
+ });
+ }
+
+ assertThat(violations.size())
+ .withFailMessage(builder.toString())
+ .isGreaterThanOrEqualTo(1);
+ }
+}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/testdata/AddApplicationScenarioInputValidationData.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/testdata/AddApplicationScenarioInputValidationData.java
deleted file mode 100644
index 9eac6cd..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/testdata/AddApplicationScenarioInputValidationData.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.testdata;
-
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import com.andrascsanyi.encyclopediagalactica.document.validation.AddApplicationScenario;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-
-import java.util.stream.Stream;
-
-/**
- * Test data for testing input validation of {@link AddApplicationScenario}.
- *
- * The provided test data includes only invalid input parameters.
- */
-public class AddApplicationScenarioInputValidationData implements ArgumentsProvider {
- @Override
- public Stream extends Arguments> provideArguments(ExtensionContext context) throws Exception {
- return Stream.of(
- Arguments.of(ApplicationInput.builder().id("1").name("name").description("desc").build()),
-
- Arguments.of(ApplicationInput.builder().id("0").name(null).description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name(" ").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name(" ").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name(" ").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("a").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("ab").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("ab ").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name(" ab ").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name(" ab ").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("a\r").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("aa\r").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("a\t").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("aa\t").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("a\f").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("aa\f").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("a\s").description("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").name("aa\s").description("desc").build()),
-
- Arguments.of(ApplicationInput.builder().id("0").description("").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description(" ").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description(" ").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description(" ").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("a").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("ab").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("ab ").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description(" ab ").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description(" ab ").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("a\r").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("aa\r").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("a\t").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("aa\t").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("a\f").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("aa\f").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("a\s").name("desc").build()),
- Arguments.of(ApplicationInput.builder().id("0").description("aa\s").name("desc").build())
- );
- }
-}
diff --git a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/validation/AddApplicationScenarioValidationTests.java b/src/test/java/com/andrascsanyi/encyclopediagalactica/document/validation/AddApplicationScenarioValidationTests.java
deleted file mode 100644
index 4fee3dd..0000000
--- a/src/test/java/com/andrascsanyi/encyclopediagalactica/document/validation/AddApplicationScenarioValidationTests.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.andrascsanyi.encyclopediagalactica.document.validation;
-
-import com.andrascsanyi.encyclopediagalactica.EncyclopediaGalacticaApplicationBaseTest;
-import com.andrascsanyi.encyclopediagalactica.document.api.graphql.input.ApplicationInput;
-import jakarta.validation.ConstraintViolation;
-import jakarta.validation.Validator;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.annotation.DirtiesContext;
-
-import java.util.Set;
-import java.util.stream.Stream;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
-public class AddApplicationScenarioValidationTests extends EncyclopediaGalacticaApplicationBaseTest {
-
- @Autowired
- private Validator validator;
-
- public static Stream testData() {
- return Stream.of(
- // id
- Arguments.of(ApplicationInput.builder().id(null).name("asd").description("asd").build(), 0),
- Arguments.of(ApplicationInput.builder().id("").name("asd").description("asd").build(), 0),
- Arguments.of(ApplicationInput.builder().id(" ").name("asd").description("asd").build(), 0),
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description("asd").build(), 0),
- Arguments.of(ApplicationInput.builder().id("1").name("asd").description("asd").build(), 1),
- // name
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description("asd").build(), 0),
- Arguments.of(ApplicationInput.builder().id("0").name(null).description("asd").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("").description("asd").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("a").description("asd").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("as").description("asd").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("as ").description("asd").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name(" as").description("asd").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name(" ").description("asd").build(), 1),
- // description
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description("asd").build(), 0),
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description(null).build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description("").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description("a").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description("as").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description("as ").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description(" as").build(), 1),
- Arguments.of(ApplicationInput.builder().id("0").name("asd").description(" ").build(), 1)
- );
- }
-
- @ParameterizedTest
- @MethodSource("testData")
- public void test(ApplicationInput applicationInput, Integer errorVolume) {
- Set> constraintViolations = validator.validate(
- applicationInput,
- AddApplicationScenario.class);
-
- StringBuilder builder = new StringBuilder();
- builder.append("id: -").append(applicationInput.getId()).append("-").append("\n");
- builder.append("name: -").append(applicationInput.getName()).append("-").append("\n");
- builder.append("description: -").append(applicationInput.getDescription()).append("-").append("\n");
-
- assertThat(constraintViolations.size())
- .withFailMessage(builder.toString())
- .isGreaterThanOrEqualTo(errorVolume);
- }
-}
diff --git a/src/test/resources/graphql-test/document/getAllApplications.graphql b/src/test/resources/graphql-test/document/getAllApplications.graphql
deleted file mode 100644
index 71410fc..0000000
--- a/src/test/resources/graphql-test/document/getAllApplications.graphql
+++ /dev/null
@@ -1,19 +0,0 @@
-query {
- getApplications {
- __typename
- {
- ... on ApplicationListOutput {
- applicationList
- {
- id
- name
- description
- }
- }
- ... on DocumentErrorOutput {
- message
- errorDetails
- }
- }
- }
-}
diff --git a/src/test/resources/graphql-test/document/getApplications.graphql b/src/test/resources/graphql-test/document/getApplications.graphql
new file mode 100644
index 0000000..8d995d7
--- /dev/null
+++ b/src/test/resources/graphql-test/document/getApplications.graphql
@@ -0,0 +1,18 @@
+query {
+ getApplications {
+ __typename
+ ... on ApplicationListOutput
+ {
+ applicationList
+ {
+ id
+ name
+ description
+ }
+ }
+ ... on DocumentErrorOutput {
+ message
+ errorDetails
+ }
+ }
+}