@@ -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 }
0 commit comments