diff --git a/src/main/java/it/aboutbits/springboot/testing/persistance/PersistenceAssert.java b/src/main/java/it/aboutbits/springboot/testing/persistance/PersistenceAssert.java index c08a6c6..7b9826e 100644 --- a/src/main/java/it/aboutbits/springboot/testing/persistance/PersistenceAssert.java +++ b/src/main/java/it/aboutbits/springboot/testing/persistance/PersistenceAssert.java @@ -20,19 +20,26 @@ private static EntityManager getEntityManager() { } @SuppressWarnings("unused") - public static & ChangeAware> WriteOperationAsserter assertThatEntity(@NonNull E before) { - return new WriteOperationAsserter<>(getEntityManager(), before); + public static , E extends Identified & ChangeAware, M extends Identified & ChangeAware> WriteOperationAsserter assertThatEntity( + @NonNull E before, + @NonNull Class modelClass + ) { + return new WriteOperationAsserter<>(getEntityManager(), before, modelClass); } @SuppressWarnings("unused") - public static > WriteOperationIdAsserter assertThatEntity(@NonNull ID id) { - return new WriteOperationIdAsserter<>(getEntityManager(), id); + public static , M extends Identified> WriteOperationIdAsserter assertThatEntity( + @NonNull ID id, + @NonNull Class modelClass + ) { + return new WriteOperationIdAsserter<>(getEntityManager(), id, modelClass); } @RequiredArgsConstructor(access = AccessLevel.PRIVATE) - public static final class WriteOperationAsserter & ChangeAware> { + public static final class WriteOperationAsserter, E extends Identified & ChangeAware, M extends Identified & ChangeAware> { private final EntityManager entityManager; private final E entity; + private final Class modelClass; @SuppressWarnings("unused") public void hasBeenCreatedInDatabase() { @@ -90,35 +97,19 @@ public void isPresentInDatabase() { assertThat(savedInstance).isNotNull(); } - @SuppressWarnings("unchecked") - private E getSavedInstance() { - return (E) entityManager.find( - entity.getClass(), + private M getSavedInstance() { + return entityManager.find( + modelClass, entity.getId() ); } } - public static final class WriteOperationIdAsserter> { + @RequiredArgsConstructor(access = AccessLevel.PRIVATE) + public static final class WriteOperationIdAsserter, M extends Identified> { private final EntityManager entityManager; private final ID id; - private final Class> clazz; - - @SuppressWarnings("unchecked") - private WriteOperationIdAsserter( - EntityManager entityManager, - ID id - ) { - this.entityManager = entityManager; - this.id = id; - - var enclosingClass = id.getClass().getEnclosingClass(); - if (Identified.class.isAssignableFrom(enclosingClass)) { - this.clazz = (Class>) enclosingClass; - } else { - throw new IllegalArgumentException("EntityId is not a subclass of Identified!"); - } - } + private final Class modelClass; @SuppressWarnings("unused") public void isAbsentInDatabase() { @@ -136,9 +127,9 @@ public void isPresentInDatabase() { assertThat(savedInstance).isNotNull(); } - private Object getSavedInstance() { + private M getSavedInstance() { return entityManager.find( - clazz, + modelClass, id ); } diff --git a/src/main/java/it/aboutbits/springboot/testing/testdata/base/ModifyableTestDataCreator.java b/src/main/java/it/aboutbits/springboot/testing/testdata/base/ModifyableTestDataCreator.java index 4d28cd1..39eec6e 100644 --- a/src/main/java/it/aboutbits/springboot/testing/testdata/base/ModifyableTestDataCreator.java +++ b/src/main/java/it/aboutbits/springboot/testing/testdata/base/ModifyableTestDataCreator.java @@ -1,10 +1,7 @@ package it.aboutbits.springboot.testing.testdata.base; -import it.aboutbits.springboot.testing.spring.BeanAccessor; -import jakarta.persistence.EntityManager; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; -import org.springframework.transaction.support.TransactionTemplate; import java.util.ArrayList; import java.util.List; @@ -80,17 +77,5 @@ protected List create() { return result; } - protected ITEM saveMutation(@NonNull ITEM item) { - var entityManager = BeanAccessor.getBean(EntityManager.class); - var transactionTemplate = BeanAccessor.getBean(TransactionTemplate.class); - - return transactionTemplate.execute(status -> { - try { - return entityManager.merge(item); - } catch (Exception e) { - status.setRollbackOnly(); - throw e; - } - }); - } + protected abstract ITEM saveMutation(@NonNull ITEM item); }