From ec63cd6506604261782bbf07bf461aaae0028582 Mon Sep 17 00:00:00 2001 From: Vidhyashankar M Date: Thu, 4 Apr 2024 15:53:54 +0530 Subject: [PATCH] ReadOnlyForRelationalDao optcontext fields made mutable. tests added for same --- .../lockedcontext/LockAndExecute.java | 4 +-- .../ReadOnlyForRelationalDao.java | 5 ++-- .../dao/operations/OpContextTest.java | 27 +++++++++++++++++++ 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 src/test/java/io/appform/dropwizard/sharding/dao/operations/OpContextTest.java diff --git a/src/main/java/io/appform/dropwizard/sharding/dao/operations/lockedcontext/LockAndExecute.java b/src/main/java/io/appform/dropwizard/sharding/dao/operations/lockedcontext/LockAndExecute.java index 75322dd7..4085acf4 100644 --- a/src/main/java/io/appform/dropwizard/sharding/dao/operations/lockedcontext/LockAndExecute.java +++ b/src/main/java/io/appform/dropwizard/sharding/dao/operations/lockedcontext/LockAndExecute.java @@ -25,9 +25,9 @@ @Data public class LockAndExecute extends OpContext { - private final List> operations = Lists.newArrayList(); + private List> operations = Lists.newArrayList(); @NonNull - private final Mode mode; + private Mode mode; private Supplier getter; private Function saver; private T entity; diff --git a/src/main/java/io/appform/dropwizard/sharding/dao/operations/relationaldao/readonlycontext/ReadOnlyForRelationalDao.java b/src/main/java/io/appform/dropwizard/sharding/dao/operations/relationaldao/readonlycontext/ReadOnlyForRelationalDao.java index 625cc69b..4df89a4a 100644 --- a/src/main/java/io/appform/dropwizard/sharding/dao/operations/relationaldao/readonlycontext/ReadOnlyForRelationalDao.java +++ b/src/main/java/io/appform/dropwizard/sharding/dao/operations/relationaldao/readonlycontext/ReadOnlyForRelationalDao.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; /** @@ -24,9 +23,9 @@ @Builder public class ReadOnlyForRelationalDao extends OpContext> { @NonNull - private final Supplier> getter; + private Supplier> getter; @Builder.Default - private final List>> operations = Lists.newArrayList(); + private List>> operations = Lists.newArrayList(); @Override public OpType getOpType() { diff --git a/src/test/java/io/appform/dropwizard/sharding/dao/operations/OpContextTest.java b/src/test/java/io/appform/dropwizard/sharding/dao/operations/OpContextTest.java new file mode 100644 index 00000000..d6ea1e7a --- /dev/null +++ b/src/test/java/io/appform/dropwizard/sharding/dao/operations/OpContextTest.java @@ -0,0 +1,27 @@ +package io.appform.dropwizard.sharding.dao.operations; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.reflections.Reflections; + +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.Set; + +public class OpContextTest { + + /** + * Fields in the opcontext implementations should be mutable so that they are available for mutation by observers. + */ + @Test + void testFieldsAreMutable() { + Reflections reflections = new Reflections("io.appform.dropwizard.sharding.dao.operations"); + Set> classes = reflections.getSubTypesOf(OpContext.class); + classes.stream().forEach(c -> { + if (Arrays.stream(c.getDeclaredFields()).anyMatch(field -> Modifier.isFinal(field.getModifiers()))) { + Assertions.fail("Immutable field in class " + c.getSimpleName()); + } + }); + + } +}