Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#250]크루 알람,게임 알람, 통합 알람을 테스트코드 작성 #251

Merged
merged 7 commits into from
Dec 2, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor(staticName = "from")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class CrewAlarmUpdateStatusRequest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor(staticName = "from")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class GameAlarmUpdateStatusRequest {

Expand Down
22 changes: 7 additions & 15 deletions src/main/java/kr/pickple/back/game/domain/GameMember.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,6 @@
package kr.pickple.back.game.domain;

import static java.lang.Boolean.*;
import static kr.pickple.back.common.domain.RegistrationStatus.*;

import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import kr.pickple.back.chat.domain.ChatRoom;
import kr.pickple.back.common.domain.BaseEntity;
Expand All @@ -23,6 +12,12 @@
import lombok.Getter;
import lombok.NoArgsConstructor;

import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static kr.pickple.back.common.domain.RegistrationStatus.CONFIRMED;
import static kr.pickple.back.common.domain.RegistrationStatus.WAITING;

@Getter
jay-so marked this conversation as resolved.
Show resolved Hide resolved
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class GameMember extends BaseEntity {
Expand All @@ -31,7 +26,6 @@ public class GameMember extends BaseEntity {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Getter
@NotNull
@Convert(converter = RegistrationStatusAttributeConverter.class)
@Column(length = 10)
Expand All @@ -40,13 +34,11 @@ public class GameMember extends BaseEntity {
@NotNull
private Boolean isReview = FALSE;

@Getter
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;

@Getter
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "game_id")
Expand Down
28 changes: 28 additions & 0 deletions src/test/java/kr/pickple/back/alarm/IntegrationAlarmTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package kr.pickple.back.alarm;

import com.fasterxml.jackson.databind.ObjectMapper;
import kr.pickple.back.auth.domain.token.JwtProvider;
import kr.pickple.back.fixture.setup.MemberSetup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;

@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureRestDocs
public abstract class IntegrationAlarmTest {

@Autowired
protected MockMvc mockMvc;

@Autowired
protected JwtProvider jwtProvider;

@Autowired
protected MemberSetup memberSetup;

@Autowired
protected ObjectMapper objectMapper;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package kr.pickple.back.alarm.controller;

import kr.pickple.back.alarm.IntegrationAlarmTest;
import kr.pickple.back.member.domain.Member;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpHeaders;
import org.springframework.transaction.annotation.Transactional;

import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@Transactional
public class AlarmControllerTest extends IntegrationAlarmTest {

private static final String BASE_URL = "/alarms";

@Test
@DisplayName("사용자는 재접속 시 읽지 않은 알람이 있는지 알 수 있다.")
void findUnreadAlarm_Success() throws Exception {
//given
final Member member = memberSetup.save();
final String accessToken = jwtProvider.createLoginToken(member.getId().toString()).getAccessToken();
final HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(accessToken);

//when & then
mockMvc.perform(get(BASE_URL + "/unread")
.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken))
.andExpect(status().isOk())
.andExpect(content().contentType(APPLICATION_JSON))
.andExpect(jsonPath("$.unread").exists())
.andDo(print());
}

@Test
@DisplayName("사용자는 해당 사용자에게 온 모든 알람 목록을 조회할 수 있다.")
void findAllAlarms_Success() throws Exception {
//given
final Member member = memberSetup.save();
final String accessToken = jwtProvider.createLoginToken(member.getId().toString()).getAccessToken();
final HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(accessToken);

//when & then
mockMvc.perform(get(BASE_URL)
.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
.param("size", "6"))
.andExpect(status().isOk())
.andExpect(content().contentType(APPLICATION_JSON))
.andExpect(jsonPath("$.alarmResponse").exists())
.andExpect(jsonPath("$.hasNext").exists())
.andDo(print());
}

@Test
@DisplayName("사용자는 해당 사용자에게 온 모든 알람을 모두 삭제할 수 있다.")
void deleteAllAlarms_Success() throws Exception {
//given
final Member member = memberSetup.save();
final String accessToken = jwtProvider.createLoginToken(member.getId().toString()).getAccessToken();
final HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(accessToken);

//when & then
mockMvc.perform(delete(BASE_URL)
.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken))
.andExpect(status().isNoContent())
.andDo(print());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package kr.pickple.back.alarm.controller;

import kr.pickple.back.alarm.IntegrationAlarmTest;
import kr.pickple.back.alarm.domain.CrewAlarm;
import kr.pickple.back.alarm.dto.request.CrewAlarmUpdateStatusRequest;
import kr.pickple.back.alarm.repository.CrewAlarmRepository;
import kr.pickple.back.crew.domain.Crew;
import kr.pickple.back.fixture.domain.CrewAlarmFixtures;
import kr.pickple.back.fixture.setup.CrewSetup;
import kr.pickple.back.member.domain.Member;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@Transactional
public class CrewAlarmControllerTest extends IntegrationAlarmTest {

private static final String BASE_URL = "/crew-alarms";

@Autowired
protected CrewSetup crewSetup;

@Autowired
private CrewAlarmRepository crewAlarmRepository;

@Test
@DisplayName("사용자는 보내진 크루 알람에 대하여 읽음 처리를 할 수 있다.")
void updateCrewAlarmStatus_Success() throws Exception {
//given
final Member member = memberSetup.save();
final String accessToken = jwtProvider.createLoginToken(member.getId().toString()).getAccessToken();
final Crew crew = crewSetup.saveWithConfirmedMembers(1);
final CrewAlarm crewAlarm = crewAlarmRepository.save(CrewAlarmFixtures.crewAlarmBuild(member, crew));
final CrewAlarmUpdateStatusRequest request = CrewAlarmUpdateStatusRequest.from(true);

//when
final ResultActions resultActions = mockMvc.perform(patch(BASE_URL + "/" + crewAlarm.getId())
.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request)));

//then
resultActions
.andExpect(status().isNoContent());
final CrewAlarm updatedCrewAlarm = crewAlarmRepository.findById(crewAlarm.getId()).get();
assertTrue(updatedCrewAlarm.getIsRead());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package kr.pickple.back.alarm.controller;

import kr.pickple.back.alarm.IntegrationAlarmTest;
import kr.pickple.back.alarm.domain.GameAlarm;
import kr.pickple.back.alarm.dto.request.GameAlarmUpdateStatusRequest;
import kr.pickple.back.alarm.repository.GameAlarmRepository;
import kr.pickple.back.fixture.domain.GameAlarmFixtures;
import kr.pickple.back.fixture.setup.GameSetup;
import kr.pickple.back.game.domain.Game;
import kr.pickple.back.member.domain.Member;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@Transactional
public class GameAlarmControllerTest extends IntegrationAlarmTest {

private static final String BASE_URL = "/game-alarms";

@Autowired
protected GameSetup gameSetup;

@Autowired
private GameAlarmRepository gameAlarmRepository;

@Test
@DisplayName("사용자는 보내진 게임 알람에 대하여 읽음 처리를 할 수 있다.")
void updateGameAlarmStatus_Success() throws Exception {
//given
final Member member = memberSetup.save();
final String accessToken = jwtProvider.createLoginToken(member.getId().toString()).getAccessToken();
final Game game = gameSetup.saveWithConfirmedMembers(1);
final GameAlarm gameAlarm = gameAlarmRepository.save(GameAlarmFixtures.gameAlarmBuild(member, game));
final GameAlarmUpdateStatusRequest request = GameAlarmUpdateStatusRequest.from(true);

//when
final ResultActions resultActions = mockMvc.perform(patch(BASE_URL + "/" + gameAlarm.getId())
.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request)));

//then
resultActions
.andExpect(status().isNoContent());
final GameAlarm updatedGameAlarm = gameAlarmRepository.findById(gameAlarm.getId()).get();
assertTrue(updatedGameAlarm.getIsRead());
}
}
Loading