Skip to content

Commit e11008c

Browse files
authored
Merge pull request #862 from Clubber2024/test/#861-test-캘린더-통합테스트
test : 캘린더 중복 조회 통합테스트
2 parents 483e872 + bc3449c commit e11008c

5 files changed

Lines changed: 197 additions & 17 deletions

File tree

src/main/java/com/clubber/ClubberServer/domain/calendar/dto/GetCalendarDuplicateResponse.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ public record GetCalendarDuplicateResponse(
77
@Schema(description = "존재여부")
88
boolean isExist,
99
@Schema(description = "모집 종류")
10-
RecruitType recruitType,
11-
@Schema(description = "년도")
12-
int year,
13-
@Schema(description = "달")
14-
int month
10+
RecruitType recruitType
1511
) {
1612
}

src/main/java/com/clubber/ClubberServer/domain/calendar/implement/CalendarReader.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.clubber.ClubberServer.domain.calendar.implement;
22

3+
import com.clubber.ClubberServer.domain.calendar.dto.GetCalendarDuplicateRequest;
34
import com.clubber.ClubberServer.domain.calendar.repository.CalendarFilterType;
45
import com.clubber.ClubberServer.domain.calendar.dto.GetAlwaysCalendarResponse;
56
import com.clubber.ClubberServer.domain.calendar.dto.GetCalendarResponse;
@@ -49,14 +50,26 @@ public PageResponse<GetCalendarResponse> readClubCalendarPage(Club club, Calenda
4950
return PageResponse.of(pageDtos);
5051
}
5152

52-
public boolean isExistInSameMonth(RecruitType recruitType, YearMonth recruitYearMonth, Club club) {
53-
LocalDateTime startOfRecruitMonth = recruitYearMonth.atDay(1).atStartOfDay();
54-
LocalDateTime endOfRecruitMonth = recruitYearMonth.atEndOfMonth().atTime(23, 59, 59);
55-
53+
public boolean isExistInSameMonth(GetCalendarDuplicateRequest request, Club club) {
5654
YearMonth nowYearMonth = YearMonth.from(LocalDateTime.now());
57-
LocalDateTime startOfThisMonth = nowYearMonth.atDay(1).atStartOfDay();
58-
LocalDateTime endOfThisMonth = nowYearMonth.atEndOfMonth().atTime(23, 59, 59);
55+
LocalDateTime startOfThisMonth = getStartOfMonth(nowYearMonth);
56+
LocalDateTime endOfThisMonth = getEndOfMonth(nowYearMonth);
57+
58+
if (request.recruitType() == RecruitType.ALWAYS) {
59+
return calendarRepository.isExistByRecruitTypeAndBetweenPeriod(RecruitType.ALWAYS, club, null, null, startOfThisMonth, endOfThisMonth);
60+
}
61+
62+
YearMonth recruitYearMonth = YearMonth.from(request.startAt());
63+
LocalDateTime startOfRecruitMonth = getStartOfMonth(recruitYearMonth);
64+
LocalDateTime endOfRecruitMonth = getEndOfMonth(recruitYearMonth);
65+
return calendarRepository.isExistByRecruitTypeAndBetweenPeriod(request.recruitType(), club, startOfRecruitMonth, endOfRecruitMonth, startOfThisMonth, endOfThisMonth);
66+
}
67+
68+
private static LocalDateTime getEndOfMonth(YearMonth nowYearMonth) {
69+
return nowYearMonth.atEndOfMonth().atTime(23, 59, 59);
70+
}
5971

60-
return calendarRepository.isExistByRecruitTypeAndBetweenPeriod(recruitType, club, startOfRecruitMonth, endOfRecruitMonth, startOfThisMonth, endOfThisMonth);
72+
private static LocalDateTime getStartOfMonth(YearMonth nowYearMonth) {
73+
return nowYearMonth.atDay(1).atStartOfDay();
6174
}
6275
}

src/main/java/com/clubber/ClubberServer/domain/calendar/service/CalendarAdminService.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,7 @@ public void deleteCalendar(Long calendarId) {
5757

5858
public GetCalendarDuplicateResponse checkDuplicateCalendar(GetCalendarDuplicateRequest request) {
5959
Club club = adminReader.getCurrentAdmin().getClub();
60-
YearMonth recruitYearMonth = YearMonth.from(request.startAt());
61-
RecruitType recruitType = request.recruitType();
62-
63-
boolean isExist = calendarReader.isExistInSameMonth(recruitType, recruitYearMonth, club);
64-
return new GetCalendarDuplicateResponse(isExist, recruitType, recruitYearMonth.getYear(), recruitYearMonth.getMonthValue());
60+
boolean isExist = calendarReader.isExistInSameMonth(request, club);
61+
return new GetCalendarDuplicateResponse(isExist, request.recruitType());
6562
}
6663
}
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
package com.clubber.ClubberServer.integration.domain.calendar.service;
2+
3+
import com.clubber.ClubberServer.domain.admin.domain.Admin;
4+
import com.clubber.ClubberServer.domain.admin.repository.AdminRepository;
5+
import com.clubber.ClubberServer.domain.calendar.dto.GetCalendarDuplicateRequest;
6+
import com.clubber.ClubberServer.domain.calendar.dto.GetCalendarDuplicateResponse;
7+
import com.clubber.ClubberServer.domain.calendar.entity.Calendar;
8+
import com.clubber.ClubberServer.domain.calendar.repository.CalendarRepository;
9+
import com.clubber.ClubberServer.domain.calendar.service.CalendarAdminService;
10+
import com.clubber.ClubberServer.domain.club.domain.Club;
11+
import com.clubber.ClubberServer.domain.club.repository.ClubRepository;
12+
import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
13+
import com.clubber.ClubberServer.global.config.security.AuthDetails;
14+
import com.clubber.ClubberServer.integration.util.fixture.AdminFixture;
15+
import com.clubber.ClubberServer.integration.util.fixture.CalendarFixture;
16+
import com.clubber.ClubberServer.integration.util.fixture.ClubFixture;
17+
import org.junit.jupiter.api.Test;
18+
import org.springframework.beans.factory.annotation.Autowired;
19+
import org.springframework.boot.test.context.SpringBootTest;
20+
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
21+
import org.springframework.security.core.context.SecurityContext;
22+
import org.springframework.security.core.context.SecurityContextHolder;
23+
import org.springframework.test.context.ActiveProfiles;
24+
import org.springframework.transaction.annotation.Transactional;
25+
26+
import java.time.LocalDateTime;
27+
28+
import static org.assertj.core.api.Assertions.*;
29+
30+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
31+
@Transactional
32+
@ActiveProfiles("test")
33+
public class CalendarAdminServiceTest {
34+
@Autowired
35+
private CalendarAdminService calendarAdminService;
36+
37+
@Autowired
38+
private CalendarRepository calendarRepository;
39+
40+
@Autowired
41+
private ClubRepository clubRepository;
42+
43+
@Autowired
44+
private AdminRepository adminRepository;
45+
46+
private void createSecurityContext(Admin admin) {
47+
SecurityContext context = SecurityContextHolder.createEmptyContext();
48+
49+
AuthDetails adminDetails = new AuthDetails(admin.getId().toString(), "ADMIN");
50+
UsernamePasswordAuthenticationToken adminToken = new UsernamePasswordAuthenticationToken(
51+
adminDetails, "user", adminDetails.getAuthorities());
52+
context.setAuthentication(adminToken);
53+
SecurityContextHolder.setContext(context);
54+
}
55+
56+
@Test
57+
void 정규모집_이번달_캘린더_시작시_중복있음() {
58+
//given
59+
Club club = ClubFixture.aClub().build();
60+
Club savedClub = clubRepository.save(club);
61+
62+
Admin admin = AdminFixture.aAdmin().club(savedClub).build();
63+
Admin savedAdmin = adminRepository.save(admin);
64+
createSecurityContext(savedAdmin);
65+
66+
LocalDateTime startAt = LocalDateTime.of(2025, 1, 1, 0, 0);
67+
LocalDateTime endAt = LocalDateTime.of(2025, 1, 4, 23, 59);
68+
RecruitType recruitType = RecruitType.REGULAR;
69+
70+
Calendar calendar = CalendarFixture.aCalendar()
71+
.club(savedClub)
72+
.recruitType(recruitType)
73+
.startAt(startAt)
74+
.endAt(endAt)
75+
.build();
76+
77+
calendarRepository.save(calendar);
78+
79+
//when
80+
GetCalendarDuplicateRequest request = new GetCalendarDuplicateRequest(recruitType, startAt);
81+
82+
//then
83+
GetCalendarDuplicateResponse response = calendarAdminService.checkDuplicateCalendar(request);
84+
assertThat(response).isNotNull();
85+
assertThat(response.isExist()).isTrue();
86+
}
87+
88+
@Test
89+
void 정규모집_다음달_시작_캘린더_저장시_중복_없음() {
90+
//given
91+
Club club = ClubFixture.aClub().build();
92+
Club savedClub = clubRepository.save(club);
93+
94+
Admin admin = AdminFixture.aAdmin().club(savedClub).build();
95+
Admin savedAdmin = adminRepository.save(admin);
96+
createSecurityContext(savedAdmin);
97+
98+
LocalDateTime startAt = LocalDateTime.of(2025, 1, 1, 0, 0);
99+
LocalDateTime endAt = LocalDateTime.of(2025, 1, 4, 23, 59);
100+
RecruitType recruitType = RecruitType.REGULAR;
101+
102+
Calendar calendar = CalendarFixture.aCalendar()
103+
.club(savedClub)
104+
.recruitType(recruitType)
105+
.startAt(startAt)
106+
.endAt(endAt)
107+
.build();
108+
109+
calendarRepository.save(calendar);
110+
111+
//when
112+
LocalDateTime nextMonthStartAt = LocalDateTime.of(2025, 2, 1, 0, 0);
113+
GetCalendarDuplicateRequest request = new GetCalendarDuplicateRequest(recruitType, nextMonthStartAt);
114+
115+
//then
116+
GetCalendarDuplicateResponse response = calendarAdminService.checkDuplicateCalendar(request);
117+
assertThat(response).isNotNull();
118+
assertThat(response.isExist()).isFalse();
119+
}
120+
121+
@Test
122+
void 상시모집_캘린더_중복() {
123+
//given
124+
Club club = ClubFixture.aClub().build();
125+
Club savedClub = clubRepository.save(club);
126+
127+
Admin admin = AdminFixture.aAdmin().club(savedClub).build();
128+
Admin savedAdmin = adminRepository.save(admin);
129+
createSecurityContext(savedAdmin);
130+
131+
RecruitType recruitType = RecruitType.ALWAYS;
132+
133+
Calendar calendar = CalendarFixture.aCalendar()
134+
.club(savedClub)
135+
.recruitType(recruitType)
136+
.startAt(null)
137+
.endAt(null)
138+
.build();
139+
140+
calendarRepository.save(calendar);
141+
142+
//when
143+
GetCalendarDuplicateRequest request = new GetCalendarDuplicateRequest(recruitType, null);
144+
145+
//then
146+
GetCalendarDuplicateResponse response = calendarAdminService.checkDuplicateCalendar(request);
147+
assertThat(response).isNotNull();
148+
assertThat(response.isExist()).isTrue();
149+
}
150+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.clubber.ClubberServer.integration.util.fixture;
2+
3+
import com.clubber.ClubberServer.domain.calendar.entity.Calendar;
4+
import com.clubber.ClubberServer.domain.recruit.domain.RecruitType;
5+
import com.clubber.ClubberServer.domain.user.domain.AccountRole;
6+
7+
import java.time.LocalDateTime;
8+
9+
public class CalendarFixture {
10+
public static final String CALENDAR_TITLE = "title";
11+
public static final String CALENDAR_URL = "url";
12+
public static final LocalDateTime START_AT = LocalDateTime.of(2025, 1, 1, 0, 0);
13+
public static final LocalDateTime END_AT = LocalDateTime.of(2025, 1, 4, 23, 59);
14+
15+
public static Calendar.CalendarBuilder aCalendar() {
16+
return Calendar.builder()
17+
.title(CALENDAR_TITLE)
18+
.url(CALENDAR_URL)
19+
.writerRole(AccountRole.ADMIN)
20+
.recruitType(RecruitType.ALWAYS)
21+
.startAt(START_AT)
22+
.endAt(END_AT);
23+
}
24+
}

0 commit comments

Comments
 (0)