|
1 | 1 | package in.koreatech.koin.unit.domain.community.keyword.service; |
2 | 2 |
|
| 3 | +import static org.assertj.core.api.Assertions.assertThat; |
3 | 4 | import static org.mockito.Mockito.mock; |
4 | 5 | import static org.mockito.Mockito.verify; |
5 | 6 | import static org.mockito.Mockito.verifyNoInteractions; |
6 | 7 | import static org.mockito.Mockito.verifyNoMoreInteractions; |
7 | 8 | import static org.mockito.Mockito.when; |
8 | 9 |
|
| 10 | +import java.lang.reflect.Method; |
9 | 11 | import java.util.List; |
10 | 12 | import java.util.Map; |
11 | 13 |
|
|
16 | 18 | import org.mockito.Mock; |
17 | 19 | import org.mockito.junit.jupiter.MockitoExtension; |
18 | 20 | import org.springframework.context.ApplicationEventPublisher; |
| 21 | +import org.springframework.transaction.annotation.Propagation; |
| 22 | +import org.springframework.transaction.annotation.Transactional; |
19 | 23 |
|
20 | 24 | import in.koreatech.koin.common.event.ArticleKeywordEvent; |
21 | 25 | import in.koreatech.koin.domain.community.article.model.Article; |
@@ -107,4 +111,14 @@ void createNotifiedArticleStatus_usesAtomicUpsert() { |
107 | 111 |
|
108 | 112 | verify(userNotificationStatusRepository).upsertLastNotifiedArticleId(1, 100); |
109 | 113 | } |
| 114 | + |
| 115 | + @Test |
| 116 | + @DisplayName("발송 이력 저장은 항상 새로운 트랜잭션에서 수행한다.") |
| 117 | + void createNotifiedArticleStatus_startsNewTransaction() throws NoSuchMethodException { |
| 118 | + Method method = KeywordService.class.getMethod("createNotifiedArticleStatus", Integer.class, Integer.class); |
| 119 | + Transactional transactional = method.getAnnotation(Transactional.class); |
| 120 | + |
| 121 | + assertThat(transactional).isNotNull(); |
| 122 | + assertThat(transactional.propagation()).isEqualTo(Propagation.REQUIRES_NEW); |
| 123 | + } |
110 | 124 | } |
0 commit comments