Compare commits

...

1 Commits

Author SHA1 Message Date
Roman Acevedo
1e993fbb40 feat(tests): allow disabling a TestSuite preventing it to run 2025-07-04 15:34:39 +02:00
3 changed files with 121 additions and 0 deletions

View File

@@ -89,8 +89,35 @@ public class TestSuite implements HasUID, TenantInterface, DeletedInterface, Has
return this.toBuilder().deleted(true).build(); return this.toBuilder().deleted(true).build();
} }
public TestSuite disable() {
var disabled = true;
return this.toBuilder()
.disabled(disabled)
.source(toggleDisabledInYamlSource(this.source, disabled))
.build();
}
public TestSuite enable() {
var disabled = false;
return this.toBuilder()
.disabled(disabled)
.source(toggleDisabledInYamlSource(this.source, disabled))
.build();
}
@Override @Override
public String source() { public String source() {
return this.getSource(); return this.getSource();
} }
protected static String toggleDisabledInYamlSource(String yamlSource, boolean disabled) {
String regex = disabled ? "^disabled\\s*:\\s*false\\s*" : "^disabled\\s*:\\s*true\\s*";
java.util.regex.Pattern p = java.util.regex.Pattern.compile(regex, java.util.regex.Pattern.MULTILINE);
if (p.matcher(yamlSource).find()) {
return p.matcher(yamlSource).replaceAll(String.format("disabled: %s\n", disabled));
}
return yamlSource + String.format("\ndisabled: %s", disabled);
}
} }

View File

@@ -1,15 +1,21 @@
package io.kestra.core.test; package io.kestra.core.test;
import io.kestra.core.test.flow.UnitTestResult; import io.kestra.core.test.flow.UnitTestResult;
import jakarta.validation.constraints.NotNull;
import java.util.List; import java.util.List;
public record TestSuiteRunResult( public record TestSuiteRunResult(
@NotNull
String id, String id,
@NotNull
String testSuiteId, String testSuiteId,
@NotNull
String namespace, String namespace,
@NotNull
String flowId, String flowId,
@NotNull
TestState state, TestState state,
List<UnitTestResult> results List<UnitTestResult> results
) { ) {
@@ -22,4 +28,8 @@ public record TestSuiteRunResult(
} }
return new TestSuiteRunResult(id, testSuiteId, namespace, flowId, TestState.SUCCESS, results); return new TestSuiteRunResult(id, testSuiteId, namespace, flowId, TestState.SUCCESS, results);
} }
public static TestSuiteRunResult ofDisabledTestSuite(String id, String testSuiteId, String namespace, String flowId) {
return new TestSuiteRunResult(id, testSuiteId, namespace, flowId, TestState.SKIPPED, List.of());
}
} }

View File

@@ -0,0 +1,84 @@
package io.kestra.core.test;
import io.kestra.core.serializers.YamlParser;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class TestSuiteTest {
@Test
void canBe_parsed() {
var source = """
id: simple-return-test-suite-1-id
namespace: io.kestra.tests
description: assert flow is returning the input value as output
flowId: return-flow
testCases:
- id: test_case_1
type: io.kestra.core.tests.flow.UnitTest
fixtures:
inputs:
inputA: "Hi there"
assertions:
- value: "{{ outputs.return.value }}"
equalTo: 'Hi there'
""";
var parsedTestSuite = YamlParser.parse(source, TestSuite.class).toBuilder().source(source).tenantId("main").build();
assertThat(parsedTestSuite).isNotNull();
assertThat(parsedTestSuite).extracting(TestSuite::getId).isEqualTo("simple-return-test-suite-1-id");
}
@Test
void canBe_disabled() {
var source = """
id: simple-return-test-suite-1-id
namespace: io.kestra.tests
description: assert flow is returning the input value as output
flowId: return-flow
testCases:
- id: test_case_1
type: io.kestra.core.tests.flow.UnitTest
fixtures:
inputs:
inputA: "Hi there"
assertions:
- value: "{{ outputs.return.value }}"
equalTo: 'Hi there'
""";
var parsedTestSuite = YamlParser.parse(source, TestSuite.class).toBuilder().source(source).tenantId("main").build();
parsedTestSuite = parsedTestSuite.disable();
assertThat(parsedTestSuite).extracting(TestSuite::isDisabled).isEqualTo(true);
assertThat(parsedTestSuite.getSource()).contains("disabled: true");
}
@Test
void canBe_enabled() {
var source = """
id: simple-return-test-suite-1-id
namespace: io.kestra.tests
description: assert flow is returning the input value as output
flowId: return-flow
disabled: true
testCases:
- id: test_case_1
type: io.kestra.core.tests.flow.UnitTest
fixtures:
inputs:
inputA: "Hi there"
assertions:
- value: "{{ outputs.return.value }}"
equalTo: 'Hi there'
""";
var parsedTestSuite = YamlParser.parse(source, TestSuite.class).toBuilder().source(source).tenantId("main").build();
parsedTestSuite = parsedTestSuite.enable();
assertThat(parsedTestSuite).extracting(TestSuite::isDisabled).isEqualTo(false);
assertThat(parsedTestSuite.getSource()).contains("disabled: false");
}
}