diff --git a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendateam/controller/AgendaTeamController.java b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendateam/controller/AgendaTeamController.java index 9ef96ffca..3b804ea64 100644 --- a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendateam/controller/AgendaTeamController.java +++ b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendateam/controller/AgendaTeamController.java @@ -133,7 +133,7 @@ public ResponseEntity> confirmTeamList(@RequestBody @Val * 아젠다 팀 참여하기 * @param user 사용자 정보, teamKeyReqDto 팀 KEY 요청 정보, agendaId 아젠다 아이디 */ - @PatchMapping + @PatchMapping("/join") public ResponseEntity attendTeamModify(@Parameter(hidden = true) @Login UserDto user, @RequestBody @Valid TeamKeyReqDto teamKeyReqDto, @RequestParam("agenda_key") UUID agendaKey) { agendaTeamService.modifyAttendTeam(user, teamKeyReqDto, agendaKey); diff --git a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendateam/service/AgendaTeamService.java b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendateam/service/AgendaTeamService.java index e6dce6230..7898b6412 100644 --- a/gg-agenda-api/src/main/java/gg/agenda/api/user/agendateam/service/AgendaTeamService.java +++ b/gg-agenda-api/src/main/java/gg/agenda/api/user/agendateam/service/AgendaTeamService.java @@ -274,10 +274,6 @@ public void modifyAttendTeam(UserDto user, TeamKeyReqDto teamKeyReqDto, UUID age .findByAgendaAndTeamKeyAndStatus(agenda, teamKeyReqDto.getTeamKey(), OPEN, CONFIRM) .orElseThrow(() -> new NotExistException(AGENDA_TEAM_NOT_FOUND)); - if (agenda.getLocation() != Location.MIX && agenda.getLocation() != agendaProfile.getLocation()) { - throw new BusinessException(LOCATION_NOT_VALID); - } - Ticket ticket = ticketRepository.findByAgendaProfileAndIsApprovedTrueAndIsUsedFalse(agendaProfile) .orElseThrow(() -> new ForbiddenException(TICKET_NOT_EXIST)); @@ -286,6 +282,7 @@ public void modifyAttendTeam(UserDto user, TeamKeyReqDto teamKeyReqDto, UUID age throw new ForbiddenException(AGENDA_TEAM_FORBIDDEN); }); + agenda.attendTeam(agendaProfile.getLocation(), LocalDateTime.now()); agendaTeam.attendTeam(agenda); ticket.useTicket(agenda.getAgendaKey()); agendaTeamProfileRepository.save(new AgendaTeamProfile(agendaTeam, agenda, agendaProfile)); diff --git a/gg-agenda-api/src/test/java/gg/agenda/api/user/agendateam/AgendaTeamControllerTest.java b/gg-agenda-api/src/test/java/gg/agenda/api/user/agendateam/AgendaTeamControllerTest.java index 722bbe5ed..693d5e29e 100644 --- a/gg-agenda-api/src/test/java/gg/agenda/api/user/agendateam/AgendaTeamControllerTest.java +++ b/gg-agenda-api/src/test/java/gg/agenda/api/user/agendateam/AgendaTeamControllerTest.java @@ -1,12 +1,12 @@ package gg.agenda.api.user.agendateam; +import static gg.data.agenda.type.AgendaStatus.*; import static gg.data.agenda.type.Location.*; import static org.assertj.core.api.AssertionsForClassTypes.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -35,7 +35,6 @@ import gg.data.agenda.AgendaProfile; import gg.data.agenda.AgendaTeam; import gg.data.agenda.AgendaTeamProfile; -import gg.data.agenda.type.AgendaStatus; import gg.data.agenda.type.AgendaTeamStatus; import gg.data.user.User; import gg.repo.agenda.AgendaTeamProfileRepository; @@ -44,6 +43,10 @@ import gg.utils.TestDataUtils; import gg.utils.annotation.IntegrationTest; import gg.utils.dto.PageRequestDto; +import gg.utils.fixture.agenda.AgendaFixture; +import gg.utils.fixture.agenda.AgendaTeamFixture; +import gg.utils.fixture.agenda.AgendaTeamProfileFixture; +import gg.utils.fixture.agenda.TicketFixture; @IntegrationTest @AutoConfigureMockMvc @@ -63,6 +66,14 @@ public class AgendaTeamControllerTest { private AgendaTeamRepository agendaTeamRepository; @Autowired private AgendaTeamProfileRepository agendaTeamProfileRepository; + @Autowired + private AgendaFixture agendaFixture; + @Autowired + private AgendaTeamFixture agendaTeamFixture; + @Autowired + private AgendaTeamProfileFixture agendaTeamProfileFixture; + @Autowired + private TicketFixture ticketFixture; User seoulUser; User gyeongsanUser; User anotherSeoulUser; @@ -296,7 +307,7 @@ public void notValidAgendaLocation() throws Exception { @DisplayName("400 참여 불가능한 Agenda Status 으로 인한 실패") public void notValidAgendaStatus() throws Exception { //given - Agenda agenda = agendaMockData.createAgenda(AgendaStatus.CONFIRM); + Agenda agenda = agendaMockData.createAgenda(CONFIRM); agendaMockData.createTicket(seoulUserAgendaProfile); TeamCreateReqDto req = new TeamCreateReqDto("teamName", true, "SEOUL", "teamContent"); @@ -512,7 +523,7 @@ public void teamDetailsGetFailByNoTeam() throws Exception { @DisplayName("403 조회 불가능한 team으로 인한 팀 상세 정보 조회 실패") public void teamDetailsGetFailByConfirmTeam() throws Exception { //given - Agenda agenda = agendaMockData.createAgenda(AgendaStatus.CONFIRM); + Agenda agenda = agendaMockData.createAgenda(CONFIRM); AgendaTeam team = agendaMockData.createAgendaTeam(agenda, seoulUser, MIX, AgendaTeamStatus.CONFIRM); TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); String content = objectMapper.writeValueAsString(req); @@ -530,7 +541,7 @@ public void teamDetailsGetFailByConfirmTeam() throws Exception { @DisplayName("404 조회 불가능한 team으로 인한 팀 상세 정보 조회 실패") public void teamDetailsGetFailByCancelTeam() throws Exception { //given - Agenda agenda = agendaMockData.createAgenda(AgendaStatus.CONFIRM); + Agenda agenda = agendaMockData.createAgenda(CONFIRM); AgendaTeam team = agendaMockData.createAgendaTeam(agenda, seoulUser, MIX, AgendaTeamStatus.CANCEL); agendaMockData.createAgendaTeamProfile(team, seoulUserAgendaProfile); TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); @@ -774,7 +785,7 @@ public void alreadyConfirmTeamFail() throws Exception { @DisplayName("403 참여 불가능한 Agenda Status 으로 인한 실패") public void notValidAgendaStatus() throws Exception { //given - Agenda agenda = agendaMockData.createAgenda(AgendaStatus.CONFIRM); + Agenda agenda = agendaMockData.createAgenda(CONFIRM); AgendaTeam team = agendaMockData.createAgendaTeam(agenda, seoulUser, SEOUL); agendaMockData.createAgendaTeamProfile(team, seoulUserAgendaProfile); TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); @@ -866,8 +877,10 @@ public void leaveTeamMateSuccess() throws Exception { .andExpect(status().isNoContent()); // then AgendaTeam updatedTeam = agendaTeamRepository.findByTeamKey(team.getTeamKey()).orElse(null); + assert updatedTeam != null; assertThat(updatedTeam.getMateCount()).isEqualTo(1); AgendaTeamProfile updatedAtp = agendaTeamProfileRepository.findById(atp.getId()).orElse(null); + assert updatedAtp != null; assertThat(updatedAtp.getIsExist()).isFalse(); ticketRepository.findByAgendaProfileAndIsApprovedTrueAndIsUsedFalse(updatedAtp.getProfile()) .ifPresent(ticket -> { @@ -895,10 +908,13 @@ public void leaveTeamLeaderSuccess() throws Exception { .andExpect(status().isNoContent()); // then AgendaTeam updatedTeam = agendaTeamRepository.findByTeamKey(team.getTeamKey()).orElse(null); + assert updatedTeam != null; assertThat(updatedTeam.getMateCount()).isEqualTo(0); AgendaTeamProfile updatedAtp = agendaTeamProfileRepository.findById(atp.getId()).orElse(null); + assert updatedAtp != null; assertThat(updatedAtp.getIsExist()).isFalse(); AgendaTeamProfile updatedAtpLeader = agendaTeamProfileRepository.findById(atpLeader.getId()).orElse(null); + assert updatedAtpLeader != null; assertThat(updatedAtpLeader.getIsExist()).isFalse(); ticketRepository.findByAgendaProfileAndIsApprovedTrueAndIsUsedFalse(updatedAtp.getProfile()) .ifPresent(ticket -> { @@ -968,7 +984,7 @@ public void notValidAgendaDeadline() throws Exception { @DisplayName("403 참여 불가능한 Agenda Status 으로 인한 실패") public void notValidAgendaStatus() throws Exception { //given - Agenda agenda = agendaMockData.createAgenda(AgendaStatus.CONFIRM); + Agenda agenda = agendaMockData.createAgenda(CONFIRM); AgendaTeam team = agendaMockData.createAgendaTeam(agenda, seoulUser, SEOUL); agendaMockData.createAgendaTeamProfile(team, seoulUserAgendaProfile); TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); @@ -1022,8 +1038,7 @@ void beforeEach() { public void openTeamGetSuccess(int page) throws Exception { //given Agenda agenda = agendaMockData.createAgenda(SEOUL); - List teams = new ArrayList<>(); - teams.addAll(agendaMockData.createAgendaTeamList(agenda, 23, AgendaTeamStatus.OPEN)); + List teams = agendaMockData.createAgendaTeamList(agenda, 23, AgendaTeamStatus.OPEN); PageRequestDto req = new PageRequestDto(page, 5); String content = objectMapper.writeValueAsString(req); // when @@ -1162,4 +1177,253 @@ public void noAgendaFail() throws Exception { .andExpect(status().isNotFound()); } } + + @Nested + @DisplayName("팀 참가 신청 테스트") + class ApplyTeamTest { + @BeforeEach + void beforeEach() { + seoulUser = testDataUtils.createNewUser(); + seoulUserAccessToken = testDataUtils.getLoginAccessTokenFromUser(seoulUser); + seoulUserAgendaProfile = agendaMockData.createAgendaProfile(seoulUser, SEOUL); + gyeongsanUser = testDataUtils.createNewUser(); + gyeongsanUserAccessToken = testDataUtils.getLoginAccessTokenFromUser(gyeongsanUser); + gyeongsanUserAgendaProfile = agendaMockData.createAgendaProfile(gyeongsanUser, GYEONGSAN); + } + + @Test + @DisplayName("204 팀 참가 신청 성공") + public void applyTeamSuccess() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL); + ticketFixture.createTicket(seoulUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + seoulUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isNoContent()); + // then + AgendaTeam updatedTeam = agendaTeamRepository.findByTeamKey(team.getTeamKey()).orElse(null); + assert updatedTeam != null; + assertThat(updatedTeam.getMateCount()).isEqualTo(2); + AgendaTeamProfile updatedAtp = agendaTeamProfileRepository.findByAgendaAndProfileAndIsExistTrue(agenda, + seoulUserAgendaProfile).orElse(null); + assertThat(updatedAtp.getIsExist()).isTrue(); + } + + @Test + @DisplayName("404 agendaProfile 없음으로 인한 실패") + public void noAgendaProfileFail() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL); + ticketFixture.createTicket(seoulUserAgendaProfile); + User noProfileUser = testDataUtils.createNewUser(); + String noProfileUserAccessToken = testDataUtils.getLoginAccessTokenFromUser(noProfileUser); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + noProfileUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()); + } + + @Test + @DisplayName("404 agenda 없음으로 인한 실패") + public void noAgendaFail() throws Exception { + //given + UUID noAgendaKey = UUID.randomUUID(); + UUID noTeamKey = UUID.randomUUID(); + TeamKeyReqDto req = new TeamKeyReqDto(noTeamKey); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + gyeongsanUserAccessToken) + .param("agenda_key", noAgendaKey.toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()); + } + + @Test + @DisplayName("404 team 없음으로 인한 실패") + public void noTeamFail() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + ticketFixture.createTicket(seoulUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(UUID.randomUUID()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + gyeongsanUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()); + } + + @Test + @DisplayName("400 참가 불가능한 지역으로 인한 실패") + public void notValidAgendaLocation() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL); + ticketFixture.createTicket(gyeongsanUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + gyeongsanUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + @DisplayName("400 참가 불가능한 인원으로 인한 실패") + public void notValidAgendaTeam() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda.getMaxPeople(), agenda, seoulUser, SEOUL); + ticketFixture.createTicket(seoulUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + seoulUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + @DisplayName("400 참가 불가능한 Agenda 시간으로 인한 실패") + public void notValidAgendaStatus() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(LocalDateTime.now().minusHours(50)); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL); + ticketFixture.createTicket(seoulUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + seoulUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + @DisplayName("400 참가 불가능한 Agenda status 으로 인한 실패") + public void notValidAgendaDeadline() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(CONFIRM); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL); + ticketFixture.createTicket(seoulUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + seoulUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + @DisplayName("409 이미 같은 아젠다에 참가 신청으로 인한 실패") + public void alreadyApplyFail() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL); + ticketFixture.createTicket(seoulUserAgendaProfile); + agendaTeamProfileFixture.createAgendaTeamProfile(agenda, team, seoulUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + seoulUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isForbidden()); + } + + @Test + @DisplayName("403 티켓 없음으로 인한 실패") + public void noTicketFail() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + seoulUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isForbidden()); + } + + @Test + @DisplayName("404 참가 불가능한 Team Status Cancel로 인한 실패") + public void notValidTeamStatus() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL, AgendaTeamStatus.CANCEL); + ticketFixture.createTicket(seoulUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + seoulUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()); + } + + @Test + @DisplayName("409 참가 불가능한 Team Status Confirm으로 인한 실패") + public void notValidTeamStatusConfirm() throws Exception { + //given + Agenda agenda = agendaFixture.createAgenda(SEOUL); + AgendaTeam team = agendaTeamFixture.createAgendaTeam(agenda, SEOUL, AgendaTeamStatus.CONFIRM); + ticketFixture.createTicket(seoulUserAgendaProfile); + TeamKeyReqDto req = new TeamKeyReqDto(team.getTeamKey()); + String content = objectMapper.writeValueAsString(req); + // when && then + mockMvc.perform( + patch("/agenda/team/join") + .header("Authorization", "Bearer " + seoulUserAccessToken) + .param("agenda_key", agenda.getAgendaKey().toString()) + .content(content) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isConflict()); + } + } } diff --git a/gg-data/src/main/java/gg/data/agenda/Agenda.java b/gg-data/src/main/java/gg/data/agenda/Agenda.java index df1a6e597..e438aa55e 100644 --- a/gg-data/src/main/java/gg/data/agenda/Agenda.java +++ b/gg-data/src/main/java/gg/data/agenda/Agenda.java @@ -133,6 +133,12 @@ public void confirmTeam(Location location, LocalDateTime now) { mustHaveCapacity(); } + public void attendTeam(Location location, LocalDateTime now) { + mustBeWithinLocation(location); + mustStatusOnGoing(); + mustBeforeDeadline(now); + } + public void cancelTeam(LocalDateTime now) { mustStatusOnGoing(); mustBeforeDeadline(now); diff --git a/gg-data/src/main/java/gg/data/agenda/AgendaTeam.java b/gg-data/src/main/java/gg/data/agenda/AgendaTeam.java index 84d9b66bd..5bab5a877 100644 --- a/gg-data/src/main/java/gg/data/agenda/AgendaTeam.java +++ b/gg-data/src/main/java/gg/data/agenda/AgendaTeam.java @@ -1,5 +1,6 @@ package gg.data.agenda; +import static gg.data.agenda.type.AgendaTeamStatus.*; import static gg.utils.exception.ErrorCode.*; import java.util.UUID; @@ -91,35 +92,35 @@ public void acceptAward(String award, int awardPriority) { } public void confirm() { - if (this.status == AgendaTeamStatus.CANCEL) { + if (this.status == CANCEL) { throw new BusinessException(AGENDA_TEAM_ALREADY_CANCEL); } - if (this.status == AgendaTeamStatus.CONFIRM) { + if (this.status == CONFIRM) { throw new BusinessException(AGENDA_TEAM_ALREADY_CONFIRM); } - this.status = AgendaTeamStatus.CONFIRM; + this.status = CONFIRM; } public void leaveTeamLeader() { - if (this.status == AgendaTeamStatus.CANCEL) { + if (this.status == CANCEL) { throw new BusinessException(AGENDA_TEAM_ALREADY_CANCEL); } - this.status = AgendaTeamStatus.CANCEL; + this.status = CANCEL; this.mateCount = 0; } public void leaveTeamMate() { - if (this.status == AgendaTeamStatus.CANCEL) { + if (this.status == CANCEL) { throw new BusinessException(AGENDA_TEAM_ALREADY_CANCEL); } this.mateCount--; } public void attendTeam(Agenda agenda) { - if (this.status == AgendaTeamStatus.CANCEL) { + if (this.status == CANCEL) { throw new BusinessException(AGENDA_TEAM_ALREADY_CANCEL); } - if (this.status == AgendaTeamStatus.CONFIRM) { + if (this.status == CONFIRM) { throw new BusinessException(AGENDA_TEAM_ALREADY_CONFIRM); } if (this.mateCount >= agenda.getMaxPeople()) { diff --git a/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaAnnouncementFixture.java b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaAnnouncementFixture.java new file mode 100644 index 000000000..07ee694b3 --- /dev/null +++ b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaAnnouncementFixture.java @@ -0,0 +1,59 @@ +package gg.utils.fixture.agenda; + +import gg.data.agenda.Agenda; +import gg.data.agenda.AgendaAnnouncement; +import gg.repo.agenda.AgendaAnnouncementRepository; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import javax.persistence.EntityManager; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class AgendaAnnouncementFixture { + + private final AgendaAnnouncementRepository agendaAnnouncementRepository; + + private final EntityManager em; + + public AgendaAnnouncement createAgendaAnnouncement(Agenda agenda) { + AgendaAnnouncement announcement = AgendaAnnouncement.builder() + .title("title " + UUID.randomUUID()) + .content("content " + UUID.randomUUID()) + .isShow(true) + .agenda(agenda) + .build(); + em.persist(announcement); + em.flush(); + em.clear(); + return announcement; + } + + public List createAgendaAnnouncementList(Agenda agenda, int size) { + List announcements = new ArrayList<>(); + for (int i = 0; i < size; i++) { + announcements.add(AgendaAnnouncement.builder() + .title("title " + i) + .content("content " + i) + .isShow(true) + .agenda(agenda) + .build()); + } + return agendaAnnouncementRepository.saveAll(announcements); + } + + public List createAgendaAnnouncementList(Agenda agenda, int size, boolean isShow) { + List announcements = new ArrayList<>(); + for (int i = 0; i < size; i++) { + announcements.add(AgendaAnnouncement.builder() + .title("title " + i) + .content("content " + i) + .isShow(isShow) + .agenda(agenda) + .build()); + } + return agendaAnnouncementRepository.saveAll(announcements); + } +} diff --git a/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaFixture.java b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaFixture.java new file mode 100644 index 000000000..7c206cb75 --- /dev/null +++ b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaFixture.java @@ -0,0 +1,109 @@ +package gg.utils.fixture.agenda; + +import static gg.data.agenda.type.AgendaStatus.*; + +import java.time.LocalDateTime; +import java.util.UUID; + +import org.springframework.stereotype.Component; + +import gg.data.agenda.Agenda; +import gg.data.agenda.type.AgendaStatus; +import gg.data.agenda.type.Location; +import gg.repo.agenda.AgendaRepository; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class AgendaFixture { + + private final AgendaRepository agendaRepository; + + public Agenda createAgenda() { + Agenda agenda = Agenda.builder() + .title("title " + UUID.randomUUID()) + .content("content " + UUID.randomUUID()) + .deadline(LocalDateTime.now().plusDays(3)) + .startTime(LocalDateTime.now().plusDays(5)) + .endTime(LocalDateTime.now().plusDays(6)) + .minTeam(2) + .maxTeam(5) + .currentTeam(0) + .minPeople(1) + .maxPeople(5) + .status(ON_GOING) + .posterUri("posterUri") + .hostIntraId("hostIntraId") + .location(Location.MIX) + .isOfficial(true) + .isRanking(true) + .build(); + return agendaRepository.save(agenda); + } + + public Agenda createAgenda(Location location) { + Agenda agenda = Agenda.builder() + .title("title " + UUID.randomUUID()) + .content("content " + UUID.randomUUID()) + .deadline(LocalDateTime.now().plusDays(3)) + .startTime(LocalDateTime.now().plusDays(5)) + .endTime(LocalDateTime.now().plusDays(6)) + .minTeam(2) + .maxTeam(5) + .currentTeam(0) + .minPeople(1) + .maxPeople(5) + .status(ON_GOING) + .posterUri("posterUri") + .hostIntraId("hostIntraId") + .location(location) + .isOfficial(true) + .isRanking(true) + .build(); + return agendaRepository.save(agenda); + } + + public Agenda createAgenda(LocalDateTime localDateTime) { + Agenda agenda = Agenda.builder() + .title("title " + UUID.randomUUID()) + .content("content " + UUID.randomUUID()) + .deadline(localDateTime) + .startTime(localDateTime.plusDays(2)) + .endTime(localDateTime.plusDays(3)) + .minTeam(2) + .maxTeam(5) + .currentTeam(0) + .minPeople(1) + .maxPeople(5) + .status(ON_GOING) + .posterUri("posterUri") + .hostIntraId("hostIntraId") + .location(Location.MIX) + .isOfficial(true) + .isRanking(true) + .build(); + return agendaRepository.save(agenda); + } + + public Agenda createAgenda(AgendaStatus agendaStatus) { + Agenda agenda = Agenda.builder() + .title("title " + UUID.randomUUID()) + .content("content " + UUID.randomUUID()) + .deadline(LocalDateTime.now().plusDays(3)) + .startTime(LocalDateTime.now().plusDays(5)) + .endTime(LocalDateTime.now().plusDays(6)) + .minTeam(2) + .maxTeam(5) + .currentTeam(0) + .minPeople(1) + .maxPeople(5) + .status(agendaStatus) + .posterUri("posterUri") + .hostIntraId("hostIntraId") + .location(Location.MIX) + .isOfficial(true) + .isRanking(true) + .build(); + return agendaRepository.save(agenda); + } +} diff --git a/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaTeamFixture.java b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaTeamFixture.java new file mode 100644 index 000000000..95e5483b8 --- /dev/null +++ b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaTeamFixture.java @@ -0,0 +1,86 @@ +package gg.utils.fixture.agenda; + +import static gg.data.agenda.type.AgendaTeamStatus.*; +import static gg.data.agenda.type.Location.*; + +import java.util.UUID; + +import org.springframework.stereotype.Component; + +import gg.data.agenda.Agenda; +import gg.data.agenda.AgendaTeam; +import gg.data.agenda.type.AgendaTeamStatus; +import gg.data.agenda.type.Location; +import gg.data.user.User; +import gg.repo.agenda.AgendaTeamRepository; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class AgendaTeamFixture { + private final AgendaTeamRepository agendaTeamRepository; + + public AgendaTeam createAgendaTeam(Agenda agenda) { + AgendaTeam agendaTeam = AgendaTeam.builder() + .agenda(agenda) + .teamKey(UUID.randomUUID()) + .name("name") + .content("content") + .leaderIntraId("leaderIntraId") + .status(OPEN) + .location(MIX) + .mateCount(3) + .awardPriority(1) + .isPrivate(false) + .build(); + return agendaTeamRepository.save(agendaTeam); + } + + public AgendaTeam createAgendaTeam(Agenda agenda, Location location) { + AgendaTeam agendaTeam = AgendaTeam.builder() + .agenda(agenda) + .teamKey(UUID.randomUUID()) + .name("name") + .content("content") + .leaderIntraId("leaderIntraId") + .status(OPEN) + .location(location) + .mateCount(1) + .awardPriority(1) + .isPrivate(false) + .build(); + return agendaTeamRepository.save(agendaTeam); + } + + public AgendaTeam createAgendaTeam(int mateCount, Agenda agenda, User seoulUser, Location location) { + AgendaTeam agendaTeam = AgendaTeam.builder() + .agenda(agenda) + .teamKey(UUID.randomUUID()) + .name("name") + .content("content") + .leaderIntraId(seoulUser.getIntraId()) + .status(OPEN) + .location(location) + .mateCount(mateCount) + .awardPriority(1) + .isPrivate(false) + .build(); + return agendaTeamRepository.save(agendaTeam); + } + + public AgendaTeam createAgendaTeam(Agenda agenda, Location location, AgendaTeamStatus agendaTeamStatus) { + AgendaTeam agendaTeam = AgendaTeam.builder() + .agenda(agenda) + .teamKey(UUID.randomUUID()) + .name("name") + .content("content") + .leaderIntraId("leaderIntraId") + .status(agendaTeamStatus) + .location(location) + .mateCount(3) + .awardPriority(1) + .isPrivate(false) + .build(); + return agendaTeamRepository.save(agendaTeam); + } +} diff --git a/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaTeamProfileFixture.java b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaTeamProfileFixture.java new file mode 100644 index 000000000..0577fb385 --- /dev/null +++ b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/AgendaTeamProfileFixture.java @@ -0,0 +1,27 @@ +package gg.utils.fixture.agenda; + +import org.springframework.stereotype.Component; + +import gg.data.agenda.Agenda; +import gg.data.agenda.AgendaProfile; +import gg.data.agenda.AgendaTeam; +import gg.data.agenda.AgendaTeamProfile; +import gg.repo.agenda.AgendaTeamProfileRepository; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class AgendaTeamProfileFixture { + private final AgendaTeamProfileRepository agendaTeamProfileRepository; + + public AgendaTeamProfile createAgendaTeamProfile(Agenda agenda, AgendaTeam agendaTeam, + AgendaProfile agendaProfile) { + AgendaTeamProfile agendaTeamProfile = AgendaTeamProfile.builder() + .agenda(agenda) + .agendaTeam(agendaTeam) + .profile(agendaProfile) + .isExist(true) + .build(); + return agendaTeamProfileRepository.save(agendaTeamProfile); + } +} diff --git a/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/TicketFixture.java b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/TicketFixture.java new file mode 100644 index 000000000..4a4c1c787 --- /dev/null +++ b/gg-utils/src/testFixtures/java/gg/utils/fixture/agenda/TicketFixture.java @@ -0,0 +1,29 @@ +package gg.utils.fixture.agenda; + +import java.time.LocalDateTime; + +import org.springframework.stereotype.Component; + +import gg.data.agenda.AgendaProfile; +import gg.data.agenda.Ticket; +import gg.repo.agenda.TicketRepository; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +public class TicketFixture { + private final TicketRepository ticketRepository; + + public Ticket createTicket(AgendaProfile agendaProfile) { + Ticket ticket = Ticket.builder() + .agendaProfile(agendaProfile) + .issuedFrom(null) + .usedTo(null) + .isApproved(true) + .approvedAt(LocalDateTime.now().minusDays(1)) + .isUsed(false) + .usedAt(null) + .build(); + return ticketRepository.save(ticket); + } +}