Skip to content

Commit

Permalink
feat(#23): 알림 전체 발송 API 테스트
Browse files Browse the repository at this point in the history
- 알림 전체 발송 API 테스트 코드를 작성했어요.
  • Loading branch information
jyj1289 committed Nov 23, 2024
1 parent 1e344af commit 5a29a5e
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package com.bamdoliro.sinabro.application.notification;

import com.bamdoliro.sinabro.domain.fcm.token.service.FCMTokenFacade;
import com.bamdoliro.sinabro.domain.notification.domain.Notification;
import com.bamdoliro.sinabro.domain.user.domain.User;
import com.bamdoliro.sinabro.infrastructure.fcm.FCMService;
import com.bamdoliro.sinabro.infrastructure.persistence.fcm.token.FCMTokenRepository;
import com.bamdoliro.sinabro.infrastructure.persistence.notification.NotificationRepository;
import com.bamdoliro.sinabro.infrastructure.persistence.user.UserRepository;
import com.bamdoliro.sinabro.presentation.notification.dto.request.SendNotificationRequest;
import com.bamdoliro.sinabro.shared.annotation.UseCase;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,4 +136,60 @@ public class NotificationControllerTest extends RestDocsTestSupport {

verify(queryNotificationListUseCase, times(1)).execute(any(User.class));
}

@Test
void FCM_토큰을_가진_유저_전체에게_알림을_발송한다() throws Exception {
User user = UserFixture.createAdmin();
SendNotificationRequest request = new SendNotificationRequest("당신에게 편지가 왔어요.", "편지가 왔어요 어서 확인해보세요!");

given(authenticationArgumentResolver.supportsParameter(any(MethodParameter.class))).willReturn(true);
given(authenticationArgumentResolver.resolveArgument(any(), any(), any(), any())).willReturn(user);

mockMvc.perform(post("/notifications/all")
.header(HttpHeaders.AUTHORIZATION, AuthFixture.createAuthHeader())
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(toJson(request))
)

.andExpect(status().isNoContent())

.andDo(restDocs.document(
requestHeaders(
headerWithName(HttpHeaders.AUTHORIZATION)
.description("Bearer token")
),
requestFields(
fieldWithPath("title")
.description("알림 제목"),
fieldWithPath("body")
.description("알림 내용")
)
));

verify(sendNotificationToAllUserUseCase, times(1)).execute(any(SendNotificationRequest.class));
}

@Test
void FCM_토큰을_가진_유저_전체에게_알림발송_과정에서_문제가_발생하면_에러가_발생한다() throws Exception {
User user = UserFixture.createAdmin();
SendNotificationRequest request = new SendNotificationRequest("당신에게 편지가 왔어요.", "편지가 왔어요 어서 확인해보세요!");

given(authenticationArgumentResolver.supportsParameter(any(MethodParameter.class))).willReturn(true);
given(authenticationArgumentResolver.resolveArgument(any(), any(), any(), any())).willReturn(user);
willThrow(new FailedToSendException()).given(sendNotificationToAllUserUseCase).execute(any(SendNotificationRequest.class));

mockMvc.perform(post("/notifications/all")
.header(HttpHeaders.AUTHORIZATION, AuthFixture.createAuthHeader())
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(toJson(request))
)

.andExpect(status().isInternalServerError())

.andDo(restDocs.document());

verify(sendNotificationToAllUserUseCase, times(1)).execute(any(SendNotificationRequest.class));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ public class UserFixture {
public static User createUser() {
return new User("bamdoliro@gmail.com", "김밤돌", Authority.USER);
}

public static User createAdmin() {
return new User("bamdoliro@gmail.com", "어다민", Authority.ADMIN);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.bamdoliro.sinabro.application.auth.RefreshAccessTokenUseCase;
import com.bamdoliro.sinabro.application.auth.*;
import com.bamdoliro.sinabro.application.diary.*;
import com.bamdoliro.sinabro.application.notification.SendNotificationToAllUserUseCase;
import com.bamdoliro.sinabro.domain.auth.service.TokenService;
import com.bamdoliro.sinabro.presentation.auth.AuthController;
import com.bamdoliro.sinabro.presentation.diary.DiaryController;
Expand Down Expand Up @@ -97,6 +98,9 @@ public abstract class ControllerTest {
@MockBean
protected QueryNotificationListUseCase queryNotificationListUseCase;

@MockBean
protected SendNotificationToAllUserUseCase sendNotificationToAllUserUseCase;

@MockBean
protected SaveFCMTokenUseCase saveFCMTokenUseCase;

Expand Down

0 comments on commit 5a29a5e

Please sign in to comment.