Skip to content

Commit ddac2a1

Browse files
committed
fix: Don't run Swap Discriminator playbook when field not in json
1 parent 929e938 commit ddac2a1

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

src/main/java/dev/dochia/cli/core/playbook/field/SwapDiscriminatorValuesFieldsPlaybook.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package dev.dochia.cli.core.playbook.field;
22

3-
import dev.dochia.cli.core.playbook.api.FieldPlaybook;
43
import dev.dochia.cli.core.context.GlobalContext;
4+
import dev.dochia.cli.core.model.PlaybookData;
5+
import dev.dochia.cli.core.playbook.api.FieldPlaybook;
56
import dev.dochia.cli.core.playbook.executor.FieldsIteratorExecutor;
67
import dev.dochia.cli.core.playbook.field.base.BaseReplaceFieldsPlaybook;
7-
import dev.dochia.cli.core.model.PlaybookData;
88
import dev.dochia.cli.core.util.JsonUtils;
99
import jakarta.inject.Singleton;
1010

@@ -32,12 +32,15 @@ protected SwapDiscriminatorValuesFieldsPlaybook(FieldsIteratorExecutor ce, Globa
3232

3333
@Override
3434
public BaseReplaceFieldsPlaybook.BaseReplaceFieldsContext getContext(PlaybookData data) {
35+
Predicate<String> isFieldInJson = field -> JsonUtils.isFieldInJson(data.getPayload(), field);
36+
Predicate<String> isFieldDiscriminator = globalContext::isDiscriminator;
37+
3538
return BaseReplaceFieldsPlaybook.BaseReplaceFieldsContext.builder()
3639
.replaceWhat("discriminator")
3740
.replaceWith("swapped values")
3841
.skipMessage("Playbook only runs for discriminator fields")
39-
.fieldFilter(globalContext::isDiscriminator)
40-
.fuzzValueProducer((schema, field) -> {
42+
.fieldFilter(isFieldDiscriminator.and(isFieldInJson))
43+
.fuzzValueProducer((_, field) -> {
4144
String oldValue = String.valueOf(JsonUtils.getVariableFromJson(data.getPayload(), field));
4245
return globalContext.getDiscriminatorValues().getOrDefault(field, Set.of()).stream()
4346
.filter(Predicate.not(oldValue::equals))

0 commit comments

Comments
 (0)