|
16 | 16 | package org.springframework.data.jpa.repository.support;
|
17 | 17 |
|
18 | 18 | import static org.assertj.core.api.Assertions.*;
|
| 19 | +import static org.mockito.BDDMockito.then; |
| 20 | +import static org.mockito.Mockito.never; |
| 21 | +import static org.mockito.Mockito.reset; |
19 | 22 |
|
20 | 23 | import jakarta.persistence.EntityManager;
|
21 | 24 | import jakarta.persistence.OptimisticLockException;
|
|
29 | 32 | import org.junit.jupiter.api.BeforeEach;
|
30 | 33 | import org.junit.jupiter.api.Test;
|
31 | 34 | import org.junit.jupiter.api.extension.ExtendWith;
|
| 35 | +import org.mockito.Mockito; |
32 | 36 | import org.springframework.data.jpa.domain.sample.PersistableWithIdClass;
|
33 | 37 | import org.springframework.data.jpa.domain.sample.PersistableWithIdClassPK;
|
34 | 38 | import org.springframework.data.jpa.domain.sample.SampleEntity;
|
@@ -57,13 +61,16 @@ class JpaRepositoryTests {
|
57 | 61 |
|
58 | 62 | @PersistenceContext EntityManager em;
|
59 | 63 |
|
| 64 | + private EntityManager spiedEntityManager; |
| 65 | + |
60 | 66 | private JpaRepository<SampleEntity, SampleEntityPK> repository;
|
61 | 67 | private CrudRepository<PersistableWithIdClass, PersistableWithIdClassPK> idClassRepository;
|
62 | 68 | private JpaRepository<VersionedUser, Long> versionedUserRepository;
|
63 | 69 |
|
64 | 70 | @BeforeEach
|
65 | 71 | void setUp() {
|
66 |
| - repository = new JpaRepositoryFactory(em).getRepository(SampleEntityRepository.class); |
| 72 | + spiedEntityManager = Mockito.spy(em); |
| 73 | + repository = new JpaRepositoryFactory(spiedEntityManager).getRepository(SampleEntityRepository.class); |
67 | 74 | idClassRepository = new JpaRepositoryFactory(em).getRepository(SampleWithIdClassRepository.class);
|
68 | 75 | versionedUserRepository = new JpaRepositoryFactory(em).getRepository(VersionedUserRepository.class);
|
69 | 76 | }
|
@@ -187,6 +194,18 @@ void deleteStaleVersionedEntityShouldRaiseOptimisticLockException() {
|
187 | 194 | });
|
188 | 195 | }
|
189 | 196 |
|
| 197 | + @Test //GH-3401 |
| 198 | + void deleteNonVersionedEntityShouldNotInvokeMerge() { |
| 199 | + SampleEntity entity = new SampleEntity("one", "eins"); |
| 200 | + repository.save(entity); |
| 201 | + repository.flush(); |
| 202 | + em.detach(entity); |
| 203 | + |
| 204 | + reset(spiedEntityManager); |
| 205 | + repository.delete(entity); |
| 206 | + then(spiedEntityManager).should(never()).merge(entity); |
| 207 | + } |
| 208 | + |
190 | 209 | private interface SampleEntityRepository extends JpaRepository<SampleEntity, SampleEntityPK> {
|
191 | 210 |
|
192 | 211 | }
|
|
0 commit comments