[FEAT] add capability to check the JPA fields to prevent refacto erors
This commit is contained in:
parent
e3dd58910e
commit
61dde0f0ed
@ -380,6 +380,19 @@ public class AnnotationTools {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean hasFieldsName(final Class<?> clazz, final String name) {
|
||||
for (final Field field : clazz.getFields()) {
|
||||
// static field is only for internal global declaration ==> remove it ..
|
||||
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
|
||||
continue;
|
||||
}
|
||||
if (AnnotationTools.getFieldName(field).equals(name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static List<String> getFieldsNames(final Class<?> clazz) {
|
||||
return getFieldsNamesFilter(clazz, false);
|
||||
}
|
||||
|
@ -52,7 +52,13 @@ public class CheckJPA<T> implements CheckFunctionInterface {
|
||||
|
||||
protected Map<String, List<CheckInterface<T>>> checking = null;
|
||||
|
||||
protected void add(final String field, final CheckInterface<T> checkFunction) {
|
||||
protected void add(final String field, final CheckInterface<T> checkFunction) throws DataAccessException {
|
||||
if (!AnnotationTools.hasFieldsName(this.clazz, field)) {
|
||||
LOGGER.error("Try to add a JPA Filter on an inexistant Field: '{}' not in {}", field,
|
||||
AnnotationTools.getAllFieldsNames(this.clazz));
|
||||
throw new DataAccessException("Try to add a JPA Filter on an inexistant Field: '" + field + "' not in "
|
||||
+ AnnotationTools.getAllFieldsNames(this.clazz));
|
||||
}
|
||||
List<CheckInterface<T>> actions = this.checking.get(field);
|
||||
if (actions == null) {
|
||||
actions = new ArrayList<>();
|
||||
|
69
test/src/test/kar/archidata/dataAccess/TestJPAChecker.java
Normal file
69
test/src/test/kar/archidata/dataAccess/TestJPAChecker.java
Normal file
@ -0,0 +1,69 @@
|
||||
package test.kar.archidata.dataAccess;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.kar.archidata.dataAccess.DBAccess;
|
||||
import org.kar.archidata.dataAccess.QueryOptions;
|
||||
import org.kar.archidata.exception.DataAccessException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import test.kar.archidata.StepwiseExtension;
|
||||
import test.kar.archidata.dataAccess.model.DataInJson;
|
||||
import test.kar.archidata.dataAccess.model.DataInJson.DataInJsonChecker;
|
||||
|
||||
@ExtendWith(StepwiseExtension.class)
|
||||
public class TestJPAChecker {
|
||||
final static private Logger LOGGER = LoggerFactory.getLogger(TestJPAChecker.class);
|
||||
|
||||
class DataInJsonCheckerTest extends DataInJsonChecker {
|
||||
|
||||
public void testWithCorrectFieldName() throws Exception {
|
||||
initialize();
|
||||
add("data",
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final DataInJson data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
// nothing to do...
|
||||
});
|
||||
}
|
||||
|
||||
public void testWithWrongFieldName() throws Exception {
|
||||
initialize();
|
||||
add("dqsdfqsdfqsdfqsdfata",
|
||||
(
|
||||
final DBAccess ioDb,
|
||||
final String baseName,
|
||||
final DataInJson data,
|
||||
final List<String> modifiedValue,
|
||||
final QueryOptions options) -> {
|
||||
// nothing to do...
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThrowWhenFieldDoesNotExist() throws Exception {
|
||||
final DataInJsonCheckerTest checker = new DataInJsonCheckerTest();
|
||||
final DataAccessException res = Assertions.assertThrows(DataAccessException.class, () -> {
|
||||
checker.testWithWrongFieldName();
|
||||
});
|
||||
Assertions.assertEquals(res.getMessage(),
|
||||
"Try to add a JPA Filter on an inexistant Field: 'dqsdfqsdfqsdfqsdfata' not in [data]");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThrowWhenFieldThatExist() throws Exception {
|
||||
final DataInJsonCheckerTest checker = new DataInJsonCheckerTest();
|
||||
Assertions.assertDoesNotThrow(() -> {
|
||||
checker.testWithCorrectFieldName();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user