Skip to content

Commit 007ecdb

Browse files
authored
Merge pull request #6 from aboutbits/remove-id-nested-in-model-assumption
remove code that was assuming the ID was nested inside the Model
2 parents 142c312 + 095868e commit 007ecdb

2 files changed

Lines changed: 21 additions & 45 deletions

File tree

src/main/java/it/aboutbits/springboot/testing/persistance/PersistenceAssert.java

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,26 @@ private static EntityManager getEntityManager() {
2020
}
2121

2222
@SuppressWarnings("unused")
23-
public static <E extends Identified<?> & ChangeAware> WriteOperationAsserter<E> assertThatEntity(@NonNull E before) {
24-
return new WriteOperationAsserter<>(getEntityManager(), before);
23+
public static <ID extends EntityId<?>, E extends Identified<ID> & ChangeAware, M extends Identified<ID> & ChangeAware> WriteOperationAsserter<ID, E, M> assertThatEntity(
24+
@NonNull E before,
25+
@NonNull Class<M> modelClass
26+
) {
27+
return new WriteOperationAsserter<>(getEntityManager(), before, modelClass);
2528
}
2629

2730
@SuppressWarnings("unused")
28-
public static <ID extends EntityId<?>> WriteOperationIdAsserter<ID> assertThatEntity(@NonNull ID id) {
29-
return new WriteOperationIdAsserter<>(getEntityManager(), id);
31+
public static <ID extends EntityId<?>, M extends Identified<ID>> WriteOperationIdAsserter<ID, M> assertThatEntity(
32+
@NonNull ID id,
33+
@NonNull Class<M> modelClass
34+
) {
35+
return new WriteOperationIdAsserter<>(getEntityManager(), id, modelClass);
3036
}
3137

3238
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
33-
public static final class WriteOperationAsserter<E extends Identified<?> & ChangeAware> {
39+
public static final class WriteOperationAsserter<ID extends EntityId<?>, E extends Identified<ID> & ChangeAware, M extends Identified<ID> & ChangeAware> {
3440
private final EntityManager entityManager;
3541
private final E entity;
42+
private final Class<M> modelClass;
3643

3744
@SuppressWarnings("unused")
3845
public void hasBeenCreatedInDatabase() {
@@ -90,35 +97,19 @@ public void isPresentInDatabase() {
9097
assertThat(savedInstance).isNotNull();
9198
}
9299

93-
@SuppressWarnings("unchecked")
94-
private E getSavedInstance() {
95-
return (E) entityManager.find(
96-
entity.getClass(),
100+
private M getSavedInstance() {
101+
return entityManager.find(
102+
modelClass,
97103
entity.getId()
98104
);
99105
}
100106
}
101107

102-
public static final class WriteOperationIdAsserter<ID extends EntityId<?>> {
108+
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
109+
public static final class WriteOperationIdAsserter<ID extends EntityId<?>, M extends Identified<ID>> {
103110
private final EntityManager entityManager;
104111
private final ID id;
105-
private final Class<? extends Identified<? extends ID>> clazz;
106-
107-
@SuppressWarnings("unchecked")
108-
private WriteOperationIdAsserter(
109-
EntityManager entityManager,
110-
ID id
111-
) {
112-
this.entityManager = entityManager;
113-
this.id = id;
114-
115-
var enclosingClass = id.getClass().getEnclosingClass();
116-
if (Identified.class.isAssignableFrom(enclosingClass)) {
117-
this.clazz = (Class<? extends Identified<? extends ID>>) enclosingClass;
118-
} else {
119-
throw new IllegalArgumentException("EntityId is not a subclass of Identified!");
120-
}
121-
}
112+
private final Class<M> modelClass;
122113

123114
@SuppressWarnings("unused")
124115
public void isAbsentInDatabase() {
@@ -136,9 +127,9 @@ public void isPresentInDatabase() {
136127
assertThat(savedInstance).isNotNull();
137128
}
138129

139-
private Object getSavedInstance() {
130+
private M getSavedInstance() {
140131
return entityManager.find(
141-
clazz,
132+
modelClass,
142133
id
143134
);
144135
}

src/main/java/it/aboutbits/springboot/testing/testdata/base/ModifyableTestDataCreator.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package it.aboutbits.springboot.testing.testdata.base;
22

3-
import it.aboutbits.springboot.testing.spring.BeanAccessor;
4-
import jakarta.persistence.EntityManager;
53
import lombok.NonNull;
64
import lombok.extern.slf4j.Slf4j;
7-
import org.springframework.transaction.support.TransactionTemplate;
85

96
import java.util.ArrayList;
107
import java.util.List;
@@ -80,17 +77,5 @@ protected List<ITEM> create() {
8077
return result;
8178
}
8279

83-
protected ITEM saveMutation(@NonNull ITEM item) {
84-
var entityManager = BeanAccessor.getBean(EntityManager.class);
85-
var transactionTemplate = BeanAccessor.getBean(TransactionTemplate.class);
86-
87-
return transactionTemplate.execute(status -> {
88-
try {
89-
return entityManager.merge(item);
90-
} catch (Exception e) {
91-
status.setRollbackOnly();
92-
throw e;
93-
}
94-
});
95-
}
80+
protected abstract ITEM saveMutation(@NonNull ITEM item);
9681
}

0 commit comments

Comments
 (0)