diff --git a/community/flamingock-auditstore-couchbase/src/test/java/io/flamingock/store/couchbase/PipelineTestHelper.java b/community/flamingock-auditstore-couchbase/src/test/java/io/flamingock/store/couchbase/PipelineTestHelper.java index cea55e751..7b3a4c76a 100644 --- a/community/flamingock-auditstore-couchbase/src/test/java/io/flamingock/store/couchbase/PipelineTestHelper.java +++ b/community/flamingock-auditstore-couchbase/src/test/java/io/flamingock/store/couchbase/PipelineTestHelper.java @@ -87,6 +87,7 @@ public static FlamingockMetadata getPreviewPipeline(String stageName, Trio changeInfo.getOrder(), changeInfo.getAuthor(), trio.getFirst().getName(), + null, PreviewConstructor.getDefault(), new PreviewMethod("apply", getParameterTypes(trio.getSecond())), rollback, diff --git a/community/flamingock-auditstore-dynamodb/src/test/java/io/flamingock/store/dynamodb/internal/entities/AuditEntryEntityTest.java b/community/flamingock-auditstore-dynamodb/src/test/java/io/flamingock/store/dynamodb/internal/entities/AuditEntryEntityTest.java index 9a08f349f..fce2c2520 100644 --- a/community/flamingock-auditstore-dynamodb/src/test/java/io/flamingock/store/dynamodb/internal/entities/AuditEntryEntityTest.java +++ b/community/flamingock-auditstore-dynamodb/src/test/java/io/flamingock/store/dynamodb/internal/entities/AuditEntryEntityTest.java @@ -58,6 +58,7 @@ void shouldConvertToAndFromAuditEntryWithTxType() { assertEquals(original.getTaskId(), converted.getTaskId()); assertEquals(original.getAuthor(), converted.getAuthor()); assertEquals(original.getState(), converted.getState()); + assertEquals(original.getSourceFile(), converted.getSourceFile()); } @Test @@ -129,6 +130,7 @@ void shouldConvertToAndFromAuditEntryWithTargetSystemId() { assertEquals(original.getTaskId(), converted.getTaskId()); assertEquals(original.getAuthor(), converted.getAuthor()); assertEquals(original.getState(), converted.getState()); + assertEquals(original.getSourceFile(), converted.getSourceFile()); } @Test diff --git a/community/flamingock-auditstore-sql/src/test/java/io/flamingock/store/sql/PipelineTestHelper.java b/community/flamingock-auditstore-sql/src/test/java/io/flamingock/store/sql/PipelineTestHelper.java index 6ea16f64c..8a7f058ab 100644 --- a/community/flamingock-auditstore-sql/src/test/java/io/flamingock/store/sql/PipelineTestHelper.java +++ b/community/flamingock-auditstore-sql/src/test/java/io/flamingock/store/sql/PipelineTestHelper.java @@ -87,6 +87,7 @@ public static FlamingockMetadata getPreviewPipeline(String stageName, Trio { String getSource(); + String getSourceFile(); + Optional getOrder(); TargetSystemDescriptor getTargetSystem(); diff --git a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/preview/builder/CodePreviewTaskBuilderTest.java b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/preview/builder/CodePreviewTaskBuilderTest.java new file mode 100644 index 000000000..8b55ae683 --- /dev/null +++ b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/preview/builder/CodePreviewTaskBuilderTest.java @@ -0,0 +1,48 @@ +/* + * 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.internal.common.core.preview.builder; + +import io.flamingock.internal.common.core.preview.CodePreviewChange; +import io.flamingock.internal.common.core.preview.PreviewConstructor; +import io.flamingock.internal.common.core.preview.PreviewMethod; +import io.flamingock.internal.common.core.task.RecoveryDescriptor; +import org.junit.jupiter.api.Test; + +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertNull; + +class CodePreviewTaskBuilderTest { + + @Test + void shouldBuildNullSourceFileForCodeChanges() { + CodePreviewChange preview = CodePreviewTaskBuilder.instance() + .setId("test-id") + .setOrder("001") + .setAuthor("author") + .setSourceClassPath("io.flamingock.TestChange") + .setConstructor(PreviewConstructor.getDefault()) + .setApplyMethod(new PreviewMethod("apply", Collections.emptyList())) + .setRollbackMethod(null) + .setRunAlways(false) + .setTransactionalFlag(true) + .setSystem(false) + .setRecovery(RecoveryDescriptor.getDefault()) + .build(); + + assertNull(preview.getSourceFile()); + } +} diff --git a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/preview/builder/TemplatePreviewTaskBuilderTest.java b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/preview/builder/TemplatePreviewTaskBuilderTest.java index c63d713ba..757f3c87f 100644 --- a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/preview/builder/TemplatePreviewTaskBuilderTest.java +++ b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/preview/builder/TemplatePreviewTaskBuilderTest.java @@ -41,6 +41,7 @@ void shouldPreserveNullTransactionalFromYaml() { .build(); assertEquals(Optional.empty(), preview.getTransactionalFlag()); + assertEquals("_0001__test.yaml", preview.getSourceFile()); } @Test @@ -56,6 +57,7 @@ void shouldPreserveExplicitTrueTransactional() { .build(); assertEquals(Optional.of(true), preview.getTransactionalFlag()); + assertEquals("_0001__test.yaml", preview.getSourceFile()); } @Test @@ -71,5 +73,6 @@ void shouldPreserveExplicitFalseTransactional() { .build(); assertEquals(Optional.of(false), preview.getTransactionalFlag()); + assertEquals("_0001__test.yaml", preview.getSourceFile()); } } diff --git a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/task/AbstractTaskDescriptorTest.java b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/task/AbstractTaskDescriptorTest.java index 8e236604f..7f37e0915 100644 --- a/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/task/AbstractTaskDescriptorTest.java +++ b/core/flamingock-core-commons/src/test/java/io/flamingock/internal/common/core/task/AbstractTaskDescriptorTest.java @@ -27,7 +27,7 @@ class AbstractTaskDescriptorTest { private static AbstractTaskDescriptor createDescriptor(Boolean transactional) { return new AbstractTaskDescriptor( - "test-id", "001", "author", "source", + "test-id", "001", "author", "source", "sourceFile", false, transactional, false, null, null, false ) {}; diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/external/store/audit/domain/AuditContextBundle.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/external/store/audit/domain/AuditContextBundle.java index b7234bf64..fe73e9476 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/external/store/audit/domain/AuditContextBundle.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/external/store/audit/domain/AuditContextBundle.java @@ -106,7 +106,7 @@ public AuditEntry toAuditEntry() { getChangeType(), loadedChange.getSource(), runtimeContext.getMethodExecutor(), - null, //TODO: set sourceFile + loadedChange.getSourceFile(), runtimeContext.getDuration(), stageExecutionContext.getHostname(), stageExecutionContext.getMetadata(), diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/AbstractExecutableTask.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/AbstractExecutableTask.java index 2f4581021..8ec7dd77a 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/AbstractExecutableTask.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/executable/AbstractExecutableTask.java @@ -84,6 +84,11 @@ public String getSource() { return loadedChange.getSource(); } + @Override + public String getSourceFile() { + return loadedChange.getSourceFile(); + } + @Override public Optional getOrder() { return loadedChange.getOrder(); diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractLoadedTask.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractLoadedTask.java index 50ad55112..737fc47a4 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractLoadedTask.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractLoadedTask.java @@ -35,6 +35,7 @@ public AbstractLoadedTask(String id, String order, String author, String implementationSourceName, + String sourceFile, boolean runAlways, Boolean transactionalFlag, boolean transactional, @@ -42,7 +43,7 @@ public AbstractLoadedTask(String id, TargetSystemDescriptor targetSystem, RecoveryDescriptor recovery, boolean legacy) { - super(id, order, author, implementationSourceName, runAlways, transactionalFlag, system, targetSystem, recovery, legacy); + super(id, order, author, implementationSourceName, sourceFile, runAlways, transactionalFlag, system, targetSystem, recovery, legacy); this.transactional = transactional; } diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractReflectionLoadedTask.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractReflectionLoadedTask.java index e02885671..59cdccd63 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractReflectionLoadedTask.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/AbstractReflectionLoadedTask.java @@ -60,10 +60,10 @@ public abstract class AbstractReflectionLoadedTask extends AbstractLoadedTask { /** * The source file name where this change is defined. * - *

This represents the original source of the change definition:

+ *

This represents the original source of the change definition when available:

*
    *
  • Template-based: The YAML/JSON template file name (e.g., "create-users.yaml")
  • - *
  • Code-based: The Java class name containing the {@code @Change} annotation
  • + *
  • Code-based: {@code null} for now
  • *
* *

Note: This may differ from the {@link #implementationClass} in template-based scenarios @@ -103,7 +103,7 @@ public AbstractReflectionLoadedTask(String fileName, TargetSystemDescriptor targetSystem, RecoveryDescriptor recovery, boolean legacy) { - super(id, order, author, implementationClass.getName(), runAlways, transactionalFlag, transactional, system, targetSystem, recovery, legacy); + super(id, order, author, implementationClass.getName(), fileName, runAlways, transactionalFlag, transactional, system, targetSystem, recovery, legacy); this.fileName = fileName; this.implementationClass = implementationClass; } @@ -111,7 +111,7 @@ public AbstractReflectionLoadedTask(String fileName, /** * Returns the source file name where this change is defined. * - * @return the file name (template file for template-based, class name for code-based) + * @return the file name for template-based changes, or {@code null} when unavailable * @see #fileName */ public String getFileName() { diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/CodeLoadedChange.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/CodeLoadedChange.java index 3503b2fe5..35b724b27 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/CodeLoadedChange.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/CodeLoadedChange.java @@ -32,6 +32,7 @@ public class CodeLoadedChange extends AbstractLoadedChange { String order, String author, Class changeClass, + String sourceFile, Constructor constructor, Method applyMethod, Optional rollbackMethod, @@ -42,7 +43,7 @@ public class CodeLoadedChange extends AbstractLoadedChange { TargetSystemDescriptor targetSystem, RecoveryDescriptor recovery, boolean legacy) { - super(changeClass.getSimpleName(), id, order, author, changeClass, constructor, runAlways, transactionalFlag, transactional, systemTask, targetSystem, recovery, legacy); + super(sourceFile, id, order, author, changeClass, constructor, runAlways, transactionalFlag, transactional, systemTask, targetSystem, recovery, legacy); this.applyMethod = applyMethod; this.rollbackMethod = rollbackMethod; } diff --git a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/CodeLoadedTaskBuilder.java b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/CodeLoadedTaskBuilder.java index a5a5b5777..69121b6fb 100644 --- a/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/CodeLoadedTaskBuilder.java +++ b/core/flamingock-core/src/main/java/io/flamingock/internal/core/task/loaded/CodeLoadedTaskBuilder.java @@ -44,6 +44,7 @@ public class CodeLoadedTaskBuilder implements LoadedTaskBuilder rollbackMethod; private boolean isRunAlways; private Boolean transactionalFlag; + private String sourceFile; private boolean isSystem; private TargetSystemDescriptor targetSystem; private RecoveryDescriptor recovery; @@ -78,6 +79,7 @@ private CodeLoadedTaskBuilder setPreview(CodePreviewChange preview) { setOrder(preview.getOrder().orElse(null)); setAuthor(preview.getAuthor()); setChangeClassName(preview.getSource()); + setSourceFile(preview.getSourceFile()); setConstructor(getConstructorFromPreview(preview)); setApplyMethod(getApplyMethodFromPreview(preview)); setRollbackMethod(getRollbackMethodFromPreview(preview)); @@ -151,6 +153,11 @@ public CodeLoadedTaskBuilder setTransactionalFlag(Boolean transactionalFlag) { return this; } + public CodeLoadedTaskBuilder setSourceFile(String sourceFile) { + this.sourceFile = sourceFile; + return this; + } + public CodeLoadedTaskBuilder setSystem(boolean system) { this.isSystem = system; return this; @@ -183,6 +190,7 @@ public CodeLoadedChange build() { order, author, changeClass, + sourceFile, constructor, applyMethod, rollbackMethod, @@ -202,6 +210,7 @@ private void setFromFlamingockChangeAnnotation(Class sourceClass, Change anno setOrder(ChangeOrderExtractor.extractOrderFromClassName(changeId, sourceClass.getName())); setAuthor(annotation.author()); setChangeClassName(sourceClass.getName()); + setSourceFile(null); setConstructor(getConstructor(sourceClass)); setApplyMethod(getApplyMethodFromAnnotation(sourceClass)); setRollbackMethod(getRollbackMethodFromAnnotation(sourceClass)); diff --git a/core/flamingock-core/src/test/java/io/flamingock/core/pipeline/PipelineTest.java b/core/flamingock-core/src/test/java/io/flamingock/core/pipeline/PipelineTest.java index 3d2e4c307..209522811 100644 --- a/core/flamingock-core/src/test/java/io/flamingock/core/pipeline/PipelineTest.java +++ b/core/flamingock-core/src/test/java/io/flamingock/core/pipeline/PipelineTest.java @@ -117,6 +117,7 @@ void shouldThrowExceptionOnlyForEmptyStageWhenMixedWithNonEmptyStages() { "001", "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -171,6 +172,7 @@ void shouldThrowExceptionWhenTaskHasInvalidOrderFormat() { "12", // Too short (only 2 alphanumeric characters) "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -186,6 +188,7 @@ void shouldThrowExceptionWhenTaskHasInvalidOrderFormat() { "a_", // Only 1 alphanumeric character "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -225,6 +228,7 @@ void shouldValidateSuccessfullyWhenTasksHaveValidOrderFormats() { "001", // Valid 3 alphanumeric characters "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -240,6 +244,7 @@ void shouldValidateSuccessfullyWhenTasksHaveValidOrderFormats() { "abc", // Valid 3 alphanumeric characters "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -255,6 +260,7 @@ void shouldValidateSuccessfullyWhenTasksHaveValidOrderFormats() { "V1_2_3", // Valid with underscores and alphanumeric chars "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -270,6 +276,7 @@ void shouldValidateSuccessfullyWhenTasksHaveValidOrderFormats() { "20250925_01_migration", // Valid complex format "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -307,6 +314,7 @@ void shouldThrowExceptionWhenDuplicateChangeIds() { "001", // Valid: 3 alphanumeric characters "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -322,6 +330,7 @@ void shouldThrowExceptionWhenDuplicateChangeIds() { "002", // Valid: 3 alphanumeric characters "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, @@ -337,6 +346,7 @@ void shouldThrowExceptionWhenDuplicateChangeIds() { "003", // Valid: 3 alphanumeric characters "test-author", PipelineTestChange.class.getName(), + null, PreviewConstructor.getDefault(), executionMethod, null, diff --git a/core/flamingock-core/src/test/java/io/flamingock/internal/core/external/store/audit/domain/AuditContextBundleTest.java b/core/flamingock-core/src/test/java/io/flamingock/internal/core/external/store/audit/domain/AuditContextBundleTest.java new file mode 100644 index 000000000..54158315a --- /dev/null +++ b/core/flamingock-core/src/test/java/io/flamingock/internal/core/external/store/audit/domain/AuditContextBundleTest.java @@ -0,0 +1,121 @@ +/* + * 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.internal.core.external.store.audit.domain; + +import io.flamingock.api.annotations.Apply; +import io.flamingock.api.annotations.Change; +import io.flamingock.internal.common.core.audit.AuditEntry; +import io.flamingock.internal.common.core.audit.AuditTxType; +import io.flamingock.internal.common.core.recovery.action.ChangeAction; +import io.flamingock.internal.common.core.task.RecoveryDescriptor; +import io.flamingock.internal.core.pipeline.execution.ExecutionContext; +import io.flamingock.internal.core.task.executable.CodeExecutableTask; +import io.flamingock.internal.core.task.executable.ExecutableTask; +import io.flamingock.internal.core.task.loaded.AbstractLoadedTask; +import io.flamingock.internal.core.task.loaded.CodeLoadedChange; +import io.flamingock.internal.core.task.loaded.CodeLoadedTaskBuilder; +import io.flamingock.internal.core.task.navigation.step.StartStep; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.lang.reflect.Method; +import java.time.LocalDateTime; +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +class AuditContextBundleTest { + + @Change(id = "audit-source-file-test", author = "aperezdieppa") + public static class _001__AuditSourceFileChange { + @Apply + public void apply() { + // no-op + } + } + + @Test + void shouldPopulateAuditEntrySourceFileFromLoadedTask() { + CodeLoadedChange loadedChange = buildLoadedChange(_001__AuditSourceFileChange.class); + CodeExecutableTask executableTask = new CodeExecutableTask<>( + "test-stage", + loadedChange, + ChangeAction.APPLY, + loadedChange.getApplyMethod(), + loadedChange.getRollbackMethod().orElse(null) + ); + RuntimeContext runtimeContext = RuntimeContext.builder() + .setStartStep(new StartStep(executableTask)) + .setAppliedAt(LocalDateTime.now()) + .build(); + ExecutionContext executionContext = new ExecutionContext("execution-id", "test-host", Collections.emptyMap()); + + AuditEntry auditEntry = new ExecutionAuditContextBundle( + loadedChange, + executionContext, + runtimeContext, + AuditTxType.NON_TX, + "target-system") + .toAuditEntry(); + + assertNull(auditEntry.getSourceFile()); + } + + @Test + void shouldPopulateAuditEntrySourceFileForTemplateBasedChanges() { + AbstractLoadedTask loadedChange = Mockito.mock(AbstractLoadedTask.class); + Mockito.when(loadedChange.getId()).thenReturn("template-change"); + Mockito.when(loadedChange.getAuthor()).thenReturn("author"); + Mockito.when(loadedChange.getSource()).thenReturn("io.flamingock.TemplateChange"); + Mockito.when(loadedChange.getSourceFile()).thenReturn("_0001__template-change.yaml"); + Mockito.when(loadedChange.isSystem()).thenReturn(false); + Mockito.when(loadedChange.getOrder()).thenReturn(java.util.Optional.of("0001")); + Mockito.when(loadedChange.getRecovery()).thenReturn(RecoveryDescriptor.getDefault()); + Mockito.when(loadedChange.isTransactional()).thenReturn(true); + + ExecutableTask executableTask = Mockito.mock(ExecutableTask.class); + Mockito.when(executableTask.getApplyMethodName()).thenReturn("apply"); + Mockito.when(executableTask.getStageName()).thenReturn("test-stage"); + + RuntimeContext runtimeContext = RuntimeContext.builder() + .setStartStep(new StartStep(executableTask)) + .setAppliedAt(LocalDateTime.now()) + .build(); + ExecutionContext executionContext = new ExecutionContext("execution-id", "test-host", Collections.emptyMap()); + + AuditEntry auditEntry = new ExecutionAuditContextBundle( + loadedChange, + executionContext, + runtimeContext, + AuditTxType.NON_TX, + "target-system") + .toAuditEntry(); + + assertEquals("_0001__template-change.yaml", auditEntry.getSourceFile()); + } + + private CodeLoadedChange buildLoadedChange(Class changeClass) { + try { + Method factoryMethod = CodeLoadedTaskBuilder.class.getDeclaredMethod("getInstanceFromClass", Class.class); + factoryMethod.setAccessible(true); + Object builder = factoryMethod.invoke(null, changeClass); + return ((CodeLoadedTaskBuilder) builder).build(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/core/flamingock-core/src/test/java/io/flamingock/internal/core/operation/AuditListOperationTest.java b/core/flamingock-core/src/test/java/io/flamingock/internal/core/operation/AuditListOperationTest.java index 484375014..cb99759eb 100644 --- a/core/flamingock-core/src/test/java/io/flamingock/internal/core/operation/AuditListOperationTest.java +++ b/core/flamingock-core/src/test/java/io/flamingock/internal/core/operation/AuditListOperationTest.java @@ -164,7 +164,7 @@ private AuditEntry createAuditEntryWithTime(String executionId, String taskId, L AuditEntry.ChangeType.STANDARD_CODE, "TestClass", "apply", - "TestClass.java", + null, 100L, "localhost", null, diff --git a/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/CodeLoadedTaskBuilderTest.java b/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/CodeLoadedTaskBuilderTest.java index 47bc64004..3096538ae 100644 --- a/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/CodeLoadedTaskBuilderTest.java +++ b/core/flamingock-core/src/test/java/io/flamingock/internal/core/task/loaded/CodeLoadedTaskBuilderTest.java @@ -54,6 +54,7 @@ void shouldBuildWithOrderInContentWhenOrderInContentPresentAndNoOrderInSource() assertEquals("001", result.getOrder().orElse(null)); assertEquals("test-id", result.getId()); assertEquals(WithoutOrderTestClass.class, result.getImplementationClass()); + assertNull(result.getSourceFile()); } @Test @@ -151,6 +152,7 @@ void shouldWorkWithRealClassWhenOrderValidationPasses() { assertFalse(result.isRunAlways()); assertTrue(result.isTransactional()); assertFalse(result.isSystem()); + assertNull(result.getSourceFile()); } @Test @@ -193,6 +195,7 @@ void shouldBuildFromAnnotatedClassCorrectly() { assertEquals("annotation-test", result.getId()); assertEquals("100", result.getOrder().orElse(null)); assertEquals(_100__TestChangeClass.class, result.getImplementationClass()); + assertNull(result.getSourceFile()); assertFalse(result.isRunAlways()); // Default is false since not specified in annotation assertFalse(result.isTransactional()); // Explicitly set to false in annotation assertFalse(result.isSystem()); @@ -227,6 +230,7 @@ void shouldBuildFromAnnotatedClassCorrectlyWhenOrderInAnnotationNull() { assertEquals("no-order-in_annotation", result.getId()); assertEquals("0001", result.getOrder().orElse(null)); assertEquals(_0001__anotherChange.class, result.getImplementationClass()); + assertNull(result.getSourceFile()); } } 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 42170b729..f02f33902 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 @@ -171,6 +171,7 @@ void shouldBuildWithOrderInContentWhenOrderInContentPresentAndNoOrderInFileName( assertEquals("001", result.getOrder().orElse(null)); assertEquals("test-id", result.getId()); assertEquals("test-file.yml", result.getFileName()); + assertEquals("test-file.yml", result.getSourceFile()); // Verify typed payloads are stored SimpleTemplateLoadedChange simpleResult = (SimpleTemplateLoadedChange) result; assertNotNull(simpleResult.getApplyPayload()); @@ -207,6 +208,7 @@ void shouldBuildWithOrderFromFileNameWhenOrderInContentIsNullAndOrderInFileNameI assertEquals("0002", result.getOrder().orElse(null)); assertEquals("test-id", result.getId()); assertEquals("_0002__test-file.yml", result.getFileName()); + assertEquals("_0002__test-file.yml", result.getSourceFile()); } } @@ -238,6 +240,7 @@ void shouldBuildWithOrderInContentWhenOrderInContentMatchesOrderInFileName() { assertEquals("003", result.getOrder().orElse(null)); assertEquals("test-id", result.getId()); assertEquals("_003__test-file.yml", result.getFileName()); + assertEquals("_003__test-file.yml", result.getSourceFile()); } } diff --git a/core/flamingock-processor/src/test/java/io/flamingock/core/processor/PipelinePreProcessorTest.java b/core/flamingock-processor/src/test/java/io/flamingock/core/processor/PipelinePreProcessorTest.java index 7a2b0d8bd..1bce4e857 100644 --- a/core/flamingock-processor/src/test/java/io/flamingock/core/processor/PipelinePreProcessorTest.java +++ b/core/flamingock-processor/src/test/java/io/flamingock/core/processor/PipelinePreProcessorTest.java @@ -443,7 +443,7 @@ private void createPipelineYamlFile() throws IOException { private Map> createMockChangesMap() { Map> map = new HashMap<>(); // Create mock tasks for each package so stages can be built - AbstractPreviewTask mockTask = new AbstractPreviewTask("mock-task", "001", "test-author", "test-source", false, true, false, null, RecoveryDescriptor.getDefault(), false) {}; + AbstractPreviewTask mockTask = new AbstractPreviewTask("mock-task", "001", "test-author", "test-source", "test-source-file", false, true, false, null, RecoveryDescriptor.getDefault(), false) {}; map.put("com.example.system", Collections.singletonList(mockTask)); map.put("com.example.system1", Collections.singletonList(mockTask)); diff --git a/core/target-systems/couchbase-target-system/src/test/java/io/flamingock/targetsystem/couchbase/PipelineTestHelper.java b/core/target-systems/couchbase-target-system/src/test/java/io/flamingock/targetsystem/couchbase/PipelineTestHelper.java index 8c996fffe..1be4949b8 100644 --- a/core/target-systems/couchbase-target-system/src/test/java/io/flamingock/targetsystem/couchbase/PipelineTestHelper.java +++ b/core/target-systems/couchbase-target-system/src/test/java/io/flamingock/targetsystem/couchbase/PipelineTestHelper.java @@ -89,6 +89,7 @@ public static FlamingockMetadata getPreviewPipeline(String stageName, Trio getCodePreviewChangesFromChangeUnit(TypeElement getBeforeExecutionChangeOrder(order), author, sourceClassPath, + null, constructor, beforeExecutionMethod, rollbackBeforeExecutionMethod, @@ -118,6 +119,7 @@ private List getCodePreviewChangesFromChangeUnit(TypeElement getExecutionChangeOrder(order, beforeExecutionMethod != null), author, sourceClassPath, + null, constructor, executionMethod, rollbackMethod, @@ -229,6 +231,7 @@ private List getCodePreviewChangesFromChangeLog(TypeElement t getChangeSetOrder(sourceClassPath, changeLogAnnotation.order(), changeSetAnnotation.order()), changeSetAnnotation.author(), sourceClassPath, + null, getPreviewConstructor(typeElement), previewMethodFromExecutableElement(changeSetMethod), null, diff --git a/utils/test-util/src/main/java/io/flamingock/common/test/pipeline/CodeChangeTestDefinition.java b/utils/test-util/src/main/java/io/flamingock/common/test/pipeline/CodeChangeTestDefinition.java index cbcd6c39f..9ddfd7f19 100644 --- a/utils/test-util/src/main/java/io/flamingock/common/test/pipeline/CodeChangeTestDefinition.java +++ b/utils/test-util/src/main/java/io/flamingock/common/test/pipeline/CodeChangeTestDefinition.java @@ -115,6 +115,7 @@ public AbstractPreviewTask toPreview() { getOrder(), author, // Default author for tests className, + null, PreviewConstructor.getDefault(), new PreviewMethod("apply", executionParameterNames), rollback,