diff --git a/CLAUDE.md b/CLAUDE.md index 3643e6834..d72d269a9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -510,4 +510,25 @@ See `docs/TEMPLATES_EVOLUTION_PROPOSALS.md` for comprehensive proposals includin - JSON Schema validation - Explicit dependencies (`depends_on`) - Policy as Code -- And more... \ No newline at end of file +- And more... + +## Commit Message Convention + +All commits must follow [Conventional Commits](https://www.conventionalcommits.org/) with a well-structured body suitable for changelog extraction from `git log`. + +### Format + +``` +(): + + +``` + +### Rules + +- **Title**: imperative mood, lowercase, no period, under 72 characters +- **Type**: `feat`, `fix`, `refactor`, `chore`, `ci`, `docs`, `test` +- **Scope**: optional but encouraged (e.g., `templates`, `core`, `cli`) +- **Body**: required for `feat` and `fix`. Explains *what* changed and *why* at a level suitable for a professional changelog. Use bullet points, bold for class/concept names, and keep it concise — no filler, no redundancy +- **No PR number** in the title when committing locally (GitHub adds it on merge) +- The body is the source of truth for the changelog — write it as if a technical user will read it to understand the release \ No newline at end of file diff --git a/core/flamingock-core-api/src/main/java/io/flamingock/api/template/AbstractChangeTemplate.java b/core/flamingock-core-api/src/main/java/io/flamingock/api/template/AbstractChangeTemplate.java index 2ef86b3f8..0be99596e 100644 --- a/core/flamingock-core-api/src/main/java/io/flamingock/api/template/AbstractChangeTemplate.java +++ b/core/flamingock-core-api/src/main/java/io/flamingock/api/template/AbstractChangeTemplate.java @@ -34,12 +34,12 @@ * *

Use {@code @ChangeTemplate(steppable = true)} for steppable templates with multiple steps. * - * @param shared configuration type (use {@code Void} if none) + * @param shared configuration type (use {@code TemplateVoid} if none) * @param apply payload type * @param rollback payload type * @see io.flamingock.api.annotations.ChangeTemplate */ -public abstract class AbstractChangeTemplate implements ChangeTemplate { +public abstract class AbstractChangeTemplate implements ChangeTemplate { private final Class configurationClass; private final Class applyPayloadClass; diff --git a/core/flamingock-core-api/src/main/java/io/flamingock/api/template/ChangeTemplate.java b/core/flamingock-core-api/src/main/java/io/flamingock/api/template/ChangeTemplate.java index f83bae4df..9af569864 100644 --- a/core/flamingock-core-api/src/main/java/io/flamingock/api/template/ChangeTemplate.java +++ b/core/flamingock-core-api/src/main/java/io/flamingock/api/template/ChangeTemplate.java @@ -22,13 +22,13 @@ * by extending {@link AbstractChangeTemplate} and annotating with * {@link io.flamingock.api.annotations.ChangeTemplate}. * - * @param shared configuration type (use {@code Void} if none) + * @param shared configuration type (use {@code TemplateVoid} if none) * @param apply payload type parsed from YAML * @param rollback payload type parsed from YAML * @see AbstractChangeTemplate * @see io.flamingock.api.annotations.ChangeTemplate */ -public interface ChangeTemplate extends ReflectionMetadataProvider { +public interface ChangeTemplate extends ReflectionMetadataProvider { void setChangeId(String changeId); diff --git a/core/flamingock-core-api/src/main/java/io/flamingock/api/template/wrappers/TemplateVoid.java b/core/flamingock-core-api/src/main/java/io/flamingock/api/template/wrappers/TemplateVoid.java new file mode 100644 index 000000000..64d13728d --- /dev/null +++ b/core/flamingock-core-api/src/main/java/io/flamingock/api/template/wrappers/TemplateVoid.java @@ -0,0 +1,38 @@ +/* + * Copyright 2026 Flamingock (https://www.flamingock.io) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.flamingock.api.template.wrappers; + +import io.flamingock.api.template.TemplatePayload; +import io.flamingock.api.template.TemplatePayloadValidationError; + +import java.util.Collections; +import java.util.List; + +/** + * A {@link TemplatePayload} sentinel representing "no configuration needed". + * + *

Replaces {@code Void} as the CONFIG type parameter in templates that + * have no shared configuration. Unlike {@code Void}, this class implements + * {@code TemplatePayload}, satisfying the {@code CONFIG extends TemplatePayload} + * bound on the template system. + */ +public class TemplateVoid implements TemplatePayload { + + @Override + public List validate() { + return Collections.emptyList(); + } +} diff --git a/core/flamingock-core-api/src/test/java/io/flamingock/api/template/AbstractChangeTemplateReflectiveClassesTest.java b/core/flamingock-core-api/src/test/java/io/flamingock/api/template/AbstractChangeTemplateReflectiveClassesTest.java index 386664c59..4e891e704 100644 --- a/core/flamingock-core-api/src/test/java/io/flamingock/api/template/AbstractChangeTemplateReflectiveClassesTest.java +++ b/core/flamingock-core-api/src/test/java/io/flamingock/api/template/AbstractChangeTemplateReflectiveClassesTest.java @@ -19,6 +19,7 @@ import io.flamingock.api.annotations.ChangeTemplate; import io.flamingock.api.annotations.Rollback; import io.flamingock.api.template.wrappers.TemplateString; +import io.flamingock.api.template.wrappers.TemplateVoid; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -31,8 +32,13 @@ class AbstractChangeTemplateReflectiveClassesTest { // Simple test configuration class - public static class TestConfig { + public static class TestConfig implements TemplatePayload { public String configValue; + + @Override + public List validate() { + return Collections.emptyList(); + } } // Simple test apply payload class @@ -103,10 +109,10 @@ public void rollback() { } } - // Test template with Void configuration + // Test template with TemplateVoid configuration @ChangeTemplate(name = "test-template-with-void-config") public static class TestTemplateWithVoidConfig - extends AbstractChangeTemplate { + extends AbstractChangeTemplate { public TestTemplateWithVoidConfig() { super(); @@ -196,14 +202,14 @@ void multipleCallsShouldReturnEquivalentSets() { } @Test - @DisplayName("getReflectiveClasses with Void configuration should include Void class") - void getReflectiveClassesWithVoidConfigShouldIncludeVoidClass() { + @DisplayName("getReflectiveClasses with TemplateVoid configuration should include TemplateVoid class") + void getReflectiveClassesWithVoidConfigShouldIncludeTemplateVoidClass() { TestTemplateWithVoidConfig template = new TestTemplateWithVoidConfig(); Collection> reflectiveClasses = template.getReflectiveClasses(); - assertTrue(reflectiveClasses.contains(Void.class), - "Should contain Void class for configuration"); + assertTrue(reflectiveClasses.contains(TemplateVoid.class), + "Should contain TemplateVoid class for configuration"); assertTrue(reflectiveClasses.contains(TemplateString.class), "Should contain TemplateString class for apply/rollback payloads"); } diff --git a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/template/ChangeTemplateManagerTest.java b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/template/ChangeTemplateManagerTest.java index ceba61ab0..e70cb57cf 100644 --- a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/template/ChangeTemplateManagerTest.java +++ b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/template/ChangeTemplateManagerTest.java @@ -20,6 +20,7 @@ import io.flamingock.api.annotations.Rollback; import io.flamingock.api.template.AbstractChangeTemplate; import io.flamingock.api.template.wrappers.TemplateString; +import io.flamingock.api.template.wrappers.TemplateVoid; import io.flamingock.internal.common.core.error.FlamingockException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -31,7 +32,7 @@ class ChangeTemplateManagerTest { @ChangeTemplate(name = "annotated-simple-template") - public static class AnnotatedSimpleTemplate extends AbstractChangeTemplate { + public static class AnnotatedSimpleTemplate extends AbstractChangeTemplate { public AnnotatedSimpleTemplate() { super(); } @@ -46,7 +47,7 @@ public void rollback() { } @ChangeTemplate(name = "annotated-steppable-template", multiStep = true) - public static class AnnotatedSteppableTemplate extends AbstractChangeTemplate { + public static class AnnotatedSteppableTemplate extends AbstractChangeTemplate { public AnnotatedSteppableTemplate() { super(); } @@ -60,7 +61,7 @@ public void rollback() { } } - public static class UnannotatedTemplate extends AbstractChangeTemplate { + public static class UnannotatedTemplate extends AbstractChangeTemplate { public UnannotatedTemplate() { super(); } @@ -114,7 +115,7 @@ void getTemplateForUnregisteredNameShouldReturnEmpty() { } @ChangeTemplate(name = "template-rollback-not-required", rollbackPayloadRequired = false) - public static class TemplateWithRollbackNotRequired extends AbstractChangeTemplate { + public static class TemplateWithRollbackNotRequired extends AbstractChangeTemplate { public TemplateWithRollbackNotRequired() { super(); } @@ -141,7 +142,7 @@ void addTemplateWithRollbackPayloadRequiredFalseShouldPropagate() { } @ChangeTemplate(name = "template-without-rollback") - public static class TemplateWithoutRollback extends AbstractChangeTemplate { + public static class TemplateWithoutRollback extends AbstractChangeTemplate { public TemplateWithoutRollback() { super(); } diff --git a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/template/TemplateValidatorTest.java b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/template/TemplateValidatorTest.java index f973bfd92..338034101 100644 --- a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/template/TemplateValidatorTest.java +++ b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/template/TemplateValidatorTest.java @@ -20,6 +20,7 @@ import io.flamingock.api.annotations.Rollback; import io.flamingock.api.template.AbstractChangeTemplate; import io.flamingock.api.template.wrappers.TemplateString; +import io.flamingock.api.template.wrappers.TemplateVoid; import io.flamingock.internal.common.core.error.validation.ValidationResult; import io.flamingock.internal.common.core.preview.TemplatePreviewChange; import org.junit.jupiter.api.BeforeEach; @@ -41,7 +42,7 @@ class TemplateValidatorTest { // Test template with @ChangeTemplate (simple template) @ChangeTemplate(name = "test-simple-template") - public static class TestSimpleTemplate extends AbstractChangeTemplate { + public static class TestSimpleTemplate extends AbstractChangeTemplate { public TestSimpleTemplate() { super(); } @@ -58,7 +59,7 @@ public void rollback() { // Test template with @ChangeTemplate(multiStep = true) @ChangeTemplate(name = "test-steppable-template", multiStep = true) - public static class TestSteppableTemplate extends AbstractChangeTemplate { + public static class TestSteppableTemplate extends AbstractChangeTemplate { public TestSteppableTemplate() { super(); } diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/AbstractTemplateExecutableTask.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/AbstractTemplateExecutableTask.java index 818070e12..38a47131c 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/AbstractTemplateExecutableTask.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/AbstractTemplateExecutableTask.java @@ -17,9 +17,9 @@ import io.flamingock.api.template.ChangeTemplate; import io.flamingock.api.template.TemplatePayload; +import io.flamingock.api.template.wrappers.TemplateVoid; import io.flamingock.internal.common.core.recovery.action.ChangeAction; import io.flamingock.internal.core.task.loaded.AbstractTemplateLoadedChange; -import io.flamingock.internal.util.FileUtil; import io.flamingock.internal.util.log.FlamingockLoggerFactory; import org.slf4j.Logger; @@ -36,7 +36,7 @@ * @param the rollback payload type * @param the type of template loaded change */ -public abstract class AbstractTemplateExecutableTask> extends ReflectionExecutableTask { protected final Logger logger = FlamingockLoggerFactory.getLogger("TemplateTask"); @@ -52,9 +52,9 @@ protected void setConfigurationData(ChangeTemplate instance) { Class parameterClass = instance.getConfigurationClass(); CONFIG data = descriptor.getConfigurationPayload(); - if (data != null && Void.class != parameterClass) { - instance.setConfiguration(FileUtil.convertToType(parameterClass, data)); - } else if (Void.class != parameterClass) { + if (data != null && TemplateVoid.class != parameterClass) { + instance.setConfiguration(data); + } else if (TemplateVoid.class != parameterClass) { logger.warn("No 'Configuration' section provided for template-based change[{}] of type[{}]", descriptor.getId(), descriptor.getTemplateClass().getName()); } diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/SimpleTemplateExecutableTask.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/SimpleTemplateExecutableTask.java index cf804ea7c..be2e05467 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/SimpleTemplateExecutableTask.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/SimpleTemplateExecutableTask.java @@ -33,7 +33,7 @@ * @param the rollback payload type */ @SuppressWarnings({"rawtypes", "unchecked"}) -public class SimpleTemplateExecutableTask +public class SimpleTemplateExecutableTask extends AbstractTemplateExecutableTask> { diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/SteppableTemplateExecutableTask.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/SteppableTemplateExecutableTask.java index 455315fd3..0c5a8fabf 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/SteppableTemplateExecutableTask.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/SteppableTemplateExecutableTask.java @@ -36,7 +36,7 @@ * @param the rollback payload type */ @SuppressWarnings({"rawtypes", "unchecked"}) -public class SteppableTemplateExecutableTask +public class SteppableTemplateExecutableTask extends AbstractTemplateExecutableTask> { diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractTemplateLoadedChange.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractTemplateLoadedChange.java index 2ba8d0d86..f4610b499 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractTemplateLoadedChange.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractTemplateLoadedChange.java @@ -39,7 +39,7 @@ * @param the apply payload type * @param the rollback payload type */ -public abstract class AbstractTemplateLoadedChange extends AbstractLoadedChange { +public abstract class AbstractTemplateLoadedChange extends AbstractLoadedChange { private final List profiles; private final CONFIG configurationPayload; diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/MultiStepTemplateLoadedChange.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/MultiStepTemplateLoadedChange.java index 2075e9e11..9b8056b44 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/MultiStepTemplateLoadedChange.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/MultiStepTemplateLoadedChange.java @@ -39,7 +39,7 @@ * @param the apply payload type * @param the rollback payload type */ -public class MultiStepTemplateLoadedChange +public class MultiStepTemplateLoadedChange extends AbstractTemplateLoadedChange { private final List> steps; @@ -69,6 +69,19 @@ public List> getSteps() { @Override protected List validateConfigurationPayload() { + CONFIG config = getConfigurationPayload(); + if (config != null) { + List payloadErrors = config.validate(); + if (!payloadErrors.isEmpty()) { + List errors = new ArrayList<>(); + for (TemplatePayloadValidationError e : payloadErrors) { + errors.add(new ValidationError( + String.format("Template '%s' configuration payload: %s", getSource(), e.getFormattedMessage()), + getId(), "change")); + } + return errors; + } + } return Collections.emptyList(); } diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/SimpleTemplateLoadedChange.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/SimpleTemplateLoadedChange.java index 0b9d6047d..d34a2ee86 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/SimpleTemplateLoadedChange.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/SimpleTemplateLoadedChange.java @@ -38,7 +38,7 @@ * @param the apply payload type * @param the rollback payload type */ -public class SimpleTemplateLoadedChange +public class SimpleTemplateLoadedChange extends AbstractTemplateLoadedChange { // Already converted to typed payload (no longer raw Object from YAML) @@ -80,6 +80,19 @@ public boolean hasRollbackPayload() { @Override protected List validateConfigurationPayload() { + CONFIG config = getConfigurationPayload(); + if (config != null) { + List payloadErrors = config.validate(); + if (!payloadErrors.isEmpty()) { + List errors = new ArrayList<>(); + for (TemplatePayloadValidationError e : payloadErrors) { + errors.add(new ValidationError( + String.format("Template '%s' configuration payload: %s", getSource(), e.getFormattedMessage()), + getId(), "change")); + } + return errors; + } + } return Collections.emptyList(); } diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/TemplateLoadedTaskBuilder.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/TemplateLoadedTaskBuilder.java index 175dbd651..e869ea6de 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/TemplateLoadedTaskBuilder.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/TemplateLoadedTaskBuilder.java @@ -18,6 +18,7 @@ import io.flamingock.api.template.AbstractChangeTemplate; import io.flamingock.api.template.TemplatePayload; import io.flamingock.api.template.TemplateStep; +import io.flamingock.api.template.wrappers.TemplateVoid; import io.flamingock.internal.common.core.error.FlamingockException; import io.flamingock.internal.common.core.error.validation.ValidationResult; import io.flamingock.internal.common.core.preview.AbstractPreviewTask; @@ -206,6 +207,7 @@ public TemplateLoadedTaskBuilder setSteps(Object steps) { @SuppressWarnings({"unchecked", "rawtypes"}) private MultiStepTemplateLoadedChange getLoadedMultiStepTemplateChange(Class steppableTemplateClass, Constructor constructor, boolean rollbackPayloadRequired) { List> convertedSteps = convertSteps(constructor, steps);// Convert apply/rollback to typed payloads at load time + TemplatePayload convertedConfig = convertConfiguration(constructor, configuration); return new MultiStepTemplateLoadedChange( fileName, id, @@ -217,7 +219,7 @@ private MultiStepTemplateLoadedChange getLoadedMultiStepTemplateChange(Class simpleTemplateClass, Constructor constructor, boolean rollbackPayloadRequired) { Pair convertedPayloads = convertPayloads(constructor, applyPayload, rollbackPayload);// Convert apply/rollback to typed payloads at load time + TemplatePayload convertedConfig = convertConfiguration(constructor, configuration); return new SimpleTemplateLoadedChange( fileName, id, @@ -239,7 +242,7 @@ private SimpleTemplateLoadedChange getLoadedSimpleTemplateChange(Class convertPayloads(Constructor constructor, Object Object applyPayload = FileUtil.convertToType(applyClass, applyData); Object rollbackPayload = null; - if (rollbackData != null && Void.class != rollbackClass) { + if (rollbackData != null) { rollbackPayload = FileUtil.convertToType(rollbackClass, rollbackData); } @@ -316,12 +319,12 @@ private List> convertSteps(Constructor construct TemplateStep step = new TemplateStep<>(); Object applyItemData = stepMap.get("apply"); - if (applyItemData != null && Void.class != applyClass) { + if (applyItemData != null) { step.setApplyPayload(FileUtil.convertToType(applyClass, applyItemData)); } Object rollbackItemData = stepMap.get("rollback"); - if (rollbackItemData != null && Void.class != rollbackClass) { + if (rollbackItemData != null) { step.setRollbackPayload(FileUtil.convertToType(rollbackClass, rollbackItemData)); } @@ -334,6 +337,28 @@ private List> convertSteps(Constructor construct return result; } + /** + * Converts raw configuration data to typed TemplatePayload at load time. + * Returns null if no configuration is needed (TemplateVoid config or null data). + */ + private TemplatePayload convertConfiguration(Constructor constructor, Object configData) { + // Instantiate template temporarily to get config class + AbstractChangeTemplate templateInstance; + try { + templateInstance = (AbstractChangeTemplate) constructor.newInstance(); + } catch (Exception e) { + throw new FlamingockException("Failed to instantiate template for config type resolution: " + e.getMessage(), e); + } + + Class configClass = templateInstance.getConfigurationClass(); + + if (configData == null || configClass == TemplateVoid.class) { + return null; + } + + return (TemplatePayload) FileUtil.convertToType(configClass, configData); + } + private TemplateLoadedTaskBuilder setPreview(TemplatePreviewChange preview) { this.preview = preview; setFileName(preview.getFileName()); diff --git a/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/executable/SteppableTemplateExecutableTaskTest.java b/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/executable/SteppableTemplateExecutableTaskTest.java index a57b6ad8c..f8bc7e199 100644 --- a/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/executable/SteppableTemplateExecutableTaskTest.java +++ b/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/executable/SteppableTemplateExecutableTaskTest.java @@ -21,6 +21,7 @@ import io.flamingock.api.template.AbstractChangeTemplate; import io.flamingock.api.template.TemplateStep; import io.flamingock.api.template.wrappers.TemplateString; +import io.flamingock.api.template.wrappers.TemplateVoid; import io.flamingock.internal.common.core.error.ChangeExecutionException; import io.flamingock.internal.common.core.error.FlamingockException; import io.flamingock.internal.common.core.recovery.action.ChangeAction; @@ -45,7 +46,7 @@ class SteppableTemplateExecutableTaskTest { private ExecutionRuntime mockRuntime; - private MultiStepTemplateLoadedChange mockDescriptor; + private MultiStepTemplateLoadedChange mockDescriptor; private Method applyMethod; private Method rollbackMethod; @@ -60,7 +61,7 @@ class SteppableTemplateExecutableTaskTest { * Test template that tracks apply and rollback invocations. */ @ChangeTemplate(name = "test-steppable-template", multiStep = true) - public static class TestSteppableTemplate extends AbstractChangeTemplate { + public static class TestSteppableTemplate extends AbstractChangeTemplate { public TestSteppableTemplate() { super(); @@ -87,7 +88,7 @@ public void rollback() { * Test template used to simulate null rollback method at executable level. */ @ChangeTemplate(name = "test-template-null-rollback-method", multiStep = true) - public static class TestTemplateWithNullRollbackMethod extends AbstractChangeTemplate { + public static class TestTemplateWithNullRollbackMethod extends AbstractChangeTemplate { public TestTemplateWithNullRollbackMethod() { super(); @@ -163,7 +164,7 @@ void shouldApplyAllStepsInOrder() { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -195,7 +196,7 @@ void shouldRollbackFromFailedStepInReverseOrder() { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -232,7 +233,7 @@ void shouldSetCorrectPayloadDuringApply() { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -263,7 +264,7 @@ void shouldSetCorrectPayloadDuringRollback() { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -298,7 +299,7 @@ void shouldSkipStepsWithoutRollbackPayload() { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -329,7 +330,7 @@ void shouldHandleEmptyStepsList() { List> emptySteps = Collections.emptyList(); when(mockDescriptor.getSteps()).thenReturn(emptySteps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -366,7 +367,7 @@ void shouldNotRollbackWhenRollbackMethodIsNull() throws Exception { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -395,7 +396,7 @@ void shouldThrowChangeExecutionExceptionOnApplyFailure() { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -427,7 +428,7 @@ void shouldThrowChangeExecutionExceptionOnRollbackFailure() { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, @@ -463,7 +464,7 @@ void shouldMaintainStepIndexAcrossApplyAndRollback() { ); when(mockDescriptor.getSteps()).thenReturn(steps); - SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( + SteppableTemplateExecutableTask task = new SteppableTemplateExecutableTask<>( "test-stage", mockDescriptor, ChangeAction.APPLY, diff --git a/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/SimpleTemplateLoadedTaskBuilderTest.java b/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/SimpleTemplateLoadedTaskBuilderTest.java index 652cf4398..3e0685603 100644 --- a/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/SimpleTemplateLoadedTaskBuilderTest.java +++ b/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/SimpleTemplateLoadedTaskBuilderTest.java @@ -23,6 +23,7 @@ import io.flamingock.api.annotations.Rollback; import io.flamingock.api.template.AbstractChangeTemplate; import io.flamingock.api.template.wrappers.TemplateString; +import io.flamingock.api.template.wrappers.TemplateVoid; import io.flamingock.api.annotations.Apply; import io.flamingock.internal.core.pipeline.loaded.stage.StageValidationContext; import org.junit.jupiter.api.BeforeEach; @@ -44,7 +45,7 @@ class SimpleTemplateLoadedTaskBuilderTest { // Simple test template implementation using the annotation @ChangeTemplate(name = "test-change-template") - public static class TestChangeTemplate extends AbstractChangeTemplate { + public static class TestChangeTemplate extends AbstractChangeTemplate { public TestChangeTemplate() { super(); @@ -80,7 +81,7 @@ void shouldBuildWithOrderInContentWhenOrderInContentPresentAndNoOrderInFileName( .setRunAlways(false) .setTransactional(true) .setSystem(false) - .setConfiguration("testConfig") + .setConfiguration(null) .setApplyPayload("applyPayload") .setRollbackPayload("rollbackPayload"); builder.setProfiles(Arrays.asList("test")); @@ -116,7 +117,7 @@ void shouldBuildWithOrderFromFileNameWhenOrderInContentIsNullAndOrderInFileNameI .setRunAlways(false) .setTransactional(true) .setSystem(false) - .setConfiguration("testConfig") + .setConfiguration(null) .setApplyPayload("applyPayload") .setRollbackPayload("rollbackPayload"); builder.setProfiles(Arrays.asList("test")); @@ -148,7 +149,7 @@ void shouldBuildWithOrderInContentWhenOrderInContentMatchesOrderInFileName() { builder.setProfiles(Arrays.asList("test")); builder.setTransactional(true) .setSystem(false) - .setConfiguration("testConfig") + .setConfiguration(null) .setApplyPayload("applyPayload") .setRollbackPayload("rollbackPayload"); diff --git a/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/SteppableTemplateLoadedTaskBuilderTest.java b/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/SteppableTemplateLoadedTaskBuilderTest.java index b489d9de8..52e569da6 100644 --- a/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/SteppableTemplateLoadedTaskBuilderTest.java +++ b/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/SteppableTemplateLoadedTaskBuilderTest.java @@ -21,6 +21,7 @@ import io.flamingock.api.template.AbstractChangeTemplate; import io.flamingock.api.template.TemplateStep; import io.flamingock.api.template.wrappers.TemplateString; +import io.flamingock.api.template.wrappers.TemplateVoid; import io.flamingock.internal.common.core.error.FlamingockException; import io.flamingock.internal.common.core.error.validation.ValidationError; import io.flamingock.internal.common.core.preview.TemplatePreviewChange; @@ -50,7 +51,7 @@ class SteppableTemplateLoadedTaskBuilderTest { // Steppable test template implementation using the annotation @ChangeTemplate(name = "test-steppable-template", multiStep = true) - public static class TestSteppableTemplate extends AbstractChangeTemplate { + public static class TestSteppableTemplate extends AbstractChangeTemplate { public TestSteppableTemplate() { super(); @@ -68,7 +69,7 @@ public void rollback() { // Simple test template implementation @ChangeTemplate(name = "test-simple-template") - public static class TestSimpleTemplate extends AbstractChangeTemplate { + public static class TestSimpleTemplate extends AbstractChangeTemplate { public TestSimpleTemplate() { super(); @@ -145,7 +146,7 @@ void shouldBuildWithOrderInContentForSteppableTemplate() { .setRunAlways(false) .setTransactional(true) .setSystem(false) - .setConfiguration(new Object()) + .setConfiguration(null) .setSteps(rawSteps); builder.setProfiles(Arrays.asList("test")); @@ -179,7 +180,7 @@ void shouldBuildWithOrderFromFileNameForSteppableTemplate() { .setRunAlways(false) .setTransactional(true) .setSystem(false) - .setConfiguration(new Object()) + .setConfiguration(null) .setSteps(rawSteps); builder.setProfiles(Arrays.asList("test")); diff --git a/platform-plugins/flamingock-springboot-integration/src/test/java/io/flamingock/springboot/SpringProfileFilterTemplateTaskTest.java b/platform-plugins/flamingock-springboot-integration/src/test/java/io/flamingock/springboot/SpringProfileFilterTemplateTaskTest.java index 9c7fb79e6..e12cf83cd 100644 --- a/platform-plugins/flamingock-springboot-integration/src/test/java/io/flamingock/springboot/SpringProfileFilterTemplateTaskTest.java +++ b/platform-plugins/flamingock-springboot-integration/src/test/java/io/flamingock/springboot/SpringProfileFilterTemplateTaskTest.java @@ -21,6 +21,7 @@ import io.flamingock.internal.common.core.task.RecoveryDescriptor; import io.flamingock.api.template.AbstractChangeTemplate; import io.flamingock.api.template.wrappers.TemplateString; +import io.flamingock.api.template.wrappers.TemplateVoid; import io.flamingock.internal.common.core.template.ChangeTemplateManager; import io.flamingock.internal.common.core.preview.TemplatePreviewChange; import io.flamingock.internal.common.core.preview.builder.PreviewTaskBuilder; @@ -129,7 +130,7 @@ private AbstractLoadedTask getTemplateLoadedChange(String profiles) { } @ChangeTemplate(name = "template-simulate") - public static class TemplateSimulate extends AbstractChangeTemplate { + public static class TemplateSimulate extends AbstractChangeTemplate { public TemplateSimulate() { super(); }