Skip to content

Commit 988bec3

Browse files
authored
Merge pull request #5 from LESSON-MATCHING-PLATFORM/feat/notification-failure-case-tests
test: 알림 실패 케이스 테스트 보강
2 parents eebe448 + 07acaf2 commit 988bec3

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

src/test/java/com/kosa/noticeserver/consumer/PaymentTopicConsumerTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1010
import static org.mockito.ArgumentMatchers.any;
11+
import static org.mockito.ArgumentMatchers.anyList;
1112
import static org.mockito.ArgumentMatchers.eq;
1213
import static org.mockito.Mockito.doThrow;
1314
import static org.mockito.Mockito.mock;
@@ -28,6 +29,14 @@ void consumePaymentEvent_whenPayloadIsInvalid_doesNotRetry() {
2829
verify(notificationService, never()).notice(any(PaymentEvent.class), any());
2930
}
3031

32+
@Test
33+
@DisplayName("잘못된 bulk JSON payload는 알림 처리 없이 소비한다")
34+
void consumePaymentBulkEvent_whenPayloadIsInvalid_doesNotRetry() {
35+
consumer.consumePaymentBulkEvent("{invalid", "event-001");
36+
37+
verify(notificationService, never()).notice(anyList(), any());
38+
}
39+
3140
@Test
3241
@DisplayName("알림 처리 중 예상하지 못한 예외는 listener 밖으로 전파한다")
3342
void consumePaymentEvent_whenUnexpectedNotificationFailure_propagatesException() {

src/test/java/com/kosa/noticeserver/domain/service/PaymentEventNotificationServiceTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,37 @@ void notice_whenDeliveryAlreadyClaimed_skipsFcmSend() throws Throwable {
7676
verify(fcmSender, never()).send(anyList());
7777
}
7878

79+
@Test
80+
@DisplayName("알림 수신 설정이 꺼진 사용자는 토큰 조회와 FCM 발송을 건너뛴다")
81+
void notice_whenSendSettingIsDisabled_skipsTokenLookupAndFcmSend() throws Throwable {
82+
PaymentEvent event = paymentEvent();
83+
84+
when(notificationService.canSend("user-001", NotificationType.PAYMENT)).thenReturn(false);
85+
86+
service.notice(event, "event-001");
87+
88+
verify(notificationService).canSend("user-001", NotificationType.PAYMENT);
89+
verify(tokenRepository, never()).findAllTokensByUserId("user-001");
90+
verify(notificationDeliveryService, never()).claimPaymentFcmDelivery(any(), any());
91+
verify(fcmSender, never()).send(anyList());
92+
}
93+
94+
@Test
95+
@DisplayName("FCM 토큰이 없는 사용자는 delivery claim과 FCM 발송을 건너뛴다")
96+
void notice_whenTokenIsMissing_skipsDeliveryClaimAndFcmSend() throws Throwable {
97+
PaymentEvent event = paymentEvent();
98+
99+
when(notificationService.canSend("user-001", NotificationType.PAYMENT)).thenReturn(true);
100+
when(tokenRepository.findAllTokensByUserId("user-001")).thenReturn(List.of());
101+
102+
service.notice(event, "event-001");
103+
104+
verify(notificationService).canSend("user-001", NotificationType.PAYMENT);
105+
verify(tokenRepository).findAllTokensByUserId("user-001");
106+
verify(notificationDeliveryService, never()).claimPaymentFcmDelivery(any(), any());
107+
verify(fcmSender, never()).send(anyList());
108+
}
109+
79110
@Test
80111
@DisplayName("같은 eventId와 사용자 조합을 두 번 처리해도 FCM은 한 번만 발송한다")
81112
void notice_whenSameEventAndUserIsConsumedTwice_sendsFcmOnce() throws Throwable {

0 commit comments

Comments
 (0)