대용량 트래픽 경험해보기(3/14) - 여행 테스트 코드 작성(TDD, Mockito) & API 자동화 문서(Swagger)
여행일정 테스트 케이스
기능 구분 | 테스트 구분 | 세부 테스트 구분 |
---|---|---|
1. 홈 > 여행 정보 | 1.1 여행정보 현황 테스트 | - 여행 정보 현황 회원정보 NULL 테스트 |
1.2 여행정보 조회 테스트 | ||
1.3 여행정보 일정 변경 테스트 | - 여행 정보 일정 수정 회원정보 NULL 테스트 | |
1.4 여행정보 제목 변경 테스트 | - 여행 정보 제목 수정 회원정보 NULL 테스트 | |
1.5 여행정보 추가 테스트 | - 여행 정보 추가 실패 테스트 - 여행 정보 추가 회원정보 NULL 테스트 | |
1.6 여행정보 삭제 테스트 | ||
2. 여행 지역 | 2.1 여행 도시 조회 테스트 | |
2.2 여행 도시 추가 테스트 | ||
2.3 여행 도시 변경 테스트 | ||
3. 여행 일정 | 3.1 여행 일정 현황 테스트 | |
3.2 여행 일정 추가 테스트 | ||
3.3 여행 일정 조회 테스트 | ||
3.4 여행 일정 수정 테스트 | ||
3.5 여행 일정 삭제 테스트 | ||
3.6 여행 일정 순서 변경 테스트 | ||
3.7 여행 일정 거리순 정렬 테스트 |
슬라이스 테스트 - 여행정보
여행정보 - Repository 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
@DisplayName("여행 Repository 테스트")
@ExtendWith(MockitoExtension.class)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelRepositoryMockTests {
@Mock
TravelRepository travelRepository;
private DateTimeFormatter formatter;
@BeforeEach
public void setUp(){
formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.KOREA);
}
@Test
@Order(1)
@DisplayName("여행 리포지토리 여행정보 등록 오류 테스트")
public void 여행_리포지토리_여행정보_등록_오류_테스트(){
//given
Travel travel = new Travel();
travel.setTravelId(1L);
travel.setMemberId(1L);
travel.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
travel.setEndDate(LocalDateTime.parse("2024-06-03 23:59:59", formatter));
travel.setCreatorId(1L);
CommonException commonException = new CommonException(ResponseCode.TRAVEL_CREATED_FAIL);
when(travelRepository.save(any(Travel.class))).thenThrow(commonException);
//when
assertThrows(CommonException.class, () -> {
travelRepository.save(travel);
});
//then
}
@Test
@Order(2)
@DisplayName("여행 리포지토리 여행정보 등록 테스트")
public void 여행_리포지토리_여행정보_등록_테스트(){
//given
Travel travel = new Travel(
1L, 1L, null,
LocalDateTime.parse("2024-06-01 00:00:00", formatter),
LocalDateTime.parse("2024-06-03 23:59:59", formatter),
1L
);
Travel savedTravel = new Travel(
1L, 1L, null,
LocalDateTime.parse("2024-06-01 00:00:00", formatter),
LocalDateTime.parse("2024-06-03 23:59:59", formatter),
1L
);
when(travelRepository.save(any(Travel.class))).thenReturn(savedTravel);
//when
Travel result = travelRepository.save(travel);
//then
assertEquals(1L, result.getTravelId());
assertEquals(1L, result.getMemberId());
assertEquals(null, result.getTravelName());
assertEquals(LocalDateTime.parse("2024-06-01 00:00:00", formatter), result.getStartDate());
assertEquals(LocalDateTime.parse("2024-06-03 23:59:59", formatter), result.getEndDate());
assertEquals(1L, result.getCreatorId());
}
@Test
@Order(3)
@DisplayName("여행 리포지토리 선택 여행정보 조회 테스트")
public void 여행_리포지토리_선택_여행정보_조회_테스트(){
//given
Long travelId = 1L;
Travel findTravel = new Travel(
1L, 1L, null,
LocalDateTime.parse("2024-06-01 00:00:00", formatter),
LocalDateTime.parse("2024-06-03 23:59:59", formatter),
1L
);
when(travelRepository.findById(any(Long.class))).thenReturn(Optional.of(findTravel));
//when
Travel result = travelRepository.findById(travelId).get();
//then
assertEquals(1L, result.getTravelId());
assertEquals(1L, result.getMemberId());
assertEquals(null, result.getTravelName());
assertEquals(LocalDateTime.parse("2024-06-01 00:00:00", formatter), result.getStartDate());
assertEquals(LocalDateTime.parse("2024-06-03 23:59:59", formatter), result.getEndDate());
assertEquals(1L, result.getCreatorId());
}
@Test
@Order(4)
@DisplayName("여행 리포지토리 선택 여행정보 조회 NULL 테스트")
public void 여행_리포지토리_선택_여행정보_조회_NULL_테스트(){
//given
Long travelId = 1L;
CommonException commonException = new CommonException(ResponseCode.TRAVEL_NOT_FOUND);
when(travelRepository.findById(any(Long.class))).thenThrow(commonException);
//when
assertThrows(CommonException.class, () -> {
travelRepository.findById(travelId).get();
});
//then
}
@Test
@Order(5)
@DisplayName("여행 리포지토리 여행일정 수정 테스트")
public void 여행_리포지토리_여행일정_수정_테스트(){
//given
Long travelId = 1L, modifierId = 1L;
TravelScheduleUpdateDto updateDto = new TravelScheduleUpdateDto();
updateDto.setStartDate(LocalDateTime.parse("2024-06-02 00:00:00", formatter));
updateDto.setEndDate(LocalDateTime.parse("2024-06-05 23:59:59", formatter));
Long updateCount = 1L;
when(travelRepository.modifyTravelSchedule(anyLong(), any(TravelScheduleUpdateDto.class), anyLong()))
.thenReturn(updateCount);
//when
Long result = travelRepository.modifyTravelSchedule(travelId, updateDto, modifierId);
//then
assertEquals(1L, result);
}
@Test
@Order(6)
@DisplayName("여행 리포지토리 여행명 수정 테스트")
public void 여행_리포지토리_여행명_수정_테스트(){
//given
Long travelId = 1L, modifierId = 1L;
TravelNameUpdateDto updateDto = new TravelNameUpdateDto();
updateDto.setTravelName("대학 친구들하고 대구 여행");
Long updateCount = 1L;
when(travelRepository.modifyTravelName(anyLong(), any(TravelNameUpdateDto.class), anyLong())).thenReturn(updateCount);
//when
Long result = travelRepository.modifyTravelName(travelId, updateDto, modifierId);
//then
assertEquals(1L, result);
}
@Test
@Order(7)
@DisplayName("여행 리포지토리 여행정보 삭제 테스트")
public void 여행_리포지토리_여행정보_삭제_테스트(){
//given
Long travelId = 1L;
doNothing().when(travelRepository).deleteById(anyLong());
//when
travelRepository.deleteById(travelId);
//then
}
@Test
@Order(8)
@DisplayName("여행 리포지토리 여행정보 현황 페이징 테스트")
public void 여행_리포지토리_여행정보_현황_페이징_테스트(){
//given
Long memberId = 1L;
int pageNumber = 0, pageSize = 15;
Pageable pageable = PageRequest.of(pageNumber, pageSize);
List<TravelResponseDto> travels = new ArrayList<>();
for(int i = 1 ; i <= 50 ; i++){
TravelResponseDto travel = new TravelResponseDto();
travel.setTravelId((long)i);
travel.setTravelName("여행명"+i);
travel.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter).plusDays((30*i)));
travel.setEndDate(LocalDateTime.parse("2024-06-04 23:59:59", formatter).plusDays((30*i)));
travels.add(travel);
}
Page<TravelResponseDto> savedTravels = new PageImpl<>(travels, pageable, travels.size());
when(travelRepository.getTravels(anyLong(), any(Pageable.class))).thenReturn(savedTravels);
//when
Page<TravelResponseDto> result = travelRepository.getTravels(memberId, pageable);
//then
assertEquals(travels.size()/pageSize+1, result.getTotalPages());
assertEquals(50, result.getTotalElements());
assertFalse(result.hasPrevious());
assertTrue(result.hasNext());
assertEquals(pageNumber, result.getNumber());
}
}
여행정보 - Service 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
@DisplayName("여행 정보 Service 테스트")
@ExtendWith(MockitoExtension.class)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelServiceMockTests {
@InjectMocks
TravelService travelService;
@Mock
TravelRepository travelRepository;
@Mock
TravelRegionService regionService;
@Mock
MemberRepository memberRepository;
private DateTimeFormatter formatter;
@BeforeEach
public void setUp(){
formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.KOREA);
}
@Test
@Order(1)
@DisplayName("여행정보 서비스 여행정보 등록 회원정보 NULL 테스트")
public void 여행정보_서비스_여행정보_등록_회원정보_NULL_테스트(){
//given
String[] countries = {"대구", "여수"};
String memberEmail = "test1@gmail.com";
TravelCreateDto createDto = new TravelCreateDto();
createDto.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
createDto.setEndDate(LocalDateTime.parse("2024-06-03 23:59:59", formatter));
Travel savedTravel = new Travel();
savedTravel.setTravelId(1L);
savedTravel.setMemberId(1L);
savedTravel.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedTravel.setEndDate(LocalDateTime.parse("2024-06-03 23:59:59", formatter));
savedTravel.setCreatorId(1L);
CommonException memberNotFound = new CommonException(ResponseCode.MEMBER_NOT_FOUND);
when(memberRepository.getMemberIdByEmail(anyString())).thenThrow(memberNotFound);
//when
assertThrows(CommonException.class, () -> {
travelService.createTravel(createDto, memberEmail);
});
//then
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(0)).save(any(Travel.class));
}
@Test
@Order(2)
@DisplayName("여행정보 서비스 여행정보 등록 테스트")
public void 여행정보_서비스_여행정보_등록_테스트(){
//given
String[] countries = {"대구", "여수"};
String memberEmail = "test1@gmail.com";
TravelCreateDto createDto = new TravelCreateDto();
createDto.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
createDto.setEndDate(LocalDateTime.parse("2024-06-03 23:59:59", formatter));
Travel savedTravel = new Travel();
savedTravel.setTravelId(1L);
savedTravel.setMemberId(1L);
savedTravel.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedTravel.setEndDate(LocalDateTime.parse("2024-06-03 23:59:59", formatter));
savedTravel.setCreatorId(1L);
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
when(travelRepository.save(any(Travel.class))).thenReturn(savedTravel);
//when
travelService.createTravel(createDto, memberEmail);
//then
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(1)).save(any(Travel.class));
}
@Test
@Order(3)
@DisplayName("여행정보 서비스 여행일정 조회 테스트")
public void 여행정보_서비스_여행일정_조회_테스트(){
//given
Long travelId = 1L;
String memberEmail = "test1@gmail.com";
Travel savedTravel = new Travel();
savedTravel.setTravelId(1L);
savedTravel.setTravelName(null);
savedTravel.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedTravel.setEndDate(LocalDateTime.parse("2024-06-03 23:59:59", formatter));
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
when(travelRepository.findById(anyLong())).thenReturn(Optional.of(savedTravel));
//when
TravelResponseDto result = travelService.findTravel(travelId, memberEmail);
//then
assertEquals(1L, result.getTravelId());
assertEquals(null, result.getTravelName());
assertEquals(LocalDateTime.parse("2024-06-01 00:00:00", formatter), result.getStartDate());
assertEquals(LocalDateTime.parse("2024-06-03 23:59:59", formatter), result.getEndDate());
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(1)).findById(1L);
}
@Test
@Order(4)
@DisplayName("여행정보 서비스 여행일정 수정 회원정보 NULL 테스트")
public void 여행정보_서비스_여행일정_수정_회원정보_NULL_테스트(){
//given
Long travelId = 1L;
TravelScheduleUpdateDto updateDto = new TravelScheduleUpdateDto();
updateDto.setStartDate(LocalDateTime.parse("2024-06-02 00:00:00", formatter));
updateDto.setEndDate(LocalDateTime.parse("2024-06-05 23:59:59", formatter));
String memberEmail = "test1@gmail.com";
CommonException memberNotFound = new CommonException(ResponseCode.MEMBER_NOT_FOUND);
when(memberRepository.getMemberIdByEmail(anyString())).thenThrow(memberNotFound);
//when
assertThrows(CommonException.class, () -> {
travelService.modifyTravelSchedule(travelId, updateDto, memberEmail);
});
//then
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(0)).modifyTravelSchedule(1L, updateDto, 1L);
}
@Test
@Order(5)
@DisplayName("여행정보 서비스 여행일정 수정 테스트")
public void 여행정보_서비스_여행일정_수정_테스트(){
//given
Long travelId = 1L;
TravelScheduleUpdateDto updateDto = new TravelScheduleUpdateDto();
updateDto.setStartDate(LocalDateTime.parse("2024-06-02 00:00:00", formatter));
updateDto.setEndDate(LocalDateTime.parse("2024-06-05 23:59:59", formatter));
String memberEmail = "test1@gmail.com";
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
when(travelRepository.modifyTravelSchedule(anyLong(), any(TravelScheduleUpdateDto.class), anyLong())).thenReturn(1L);
//when
long result = travelService.modifyTravelSchedule(travelId, updateDto, memberEmail);
//then
assertEquals(1L, result);
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(1)).modifyTravelSchedule(1L, updateDto, 1L);
}
@Test
@Order(6)
@DisplayName("여행정보 서비스 여행명 수정 회원정보 NULL 테스트")
public void 여행정보_서비스_여행명_수정_회원정보_NULL_테스트(){
//given
Long travelId = 1L;
TravelNameUpdateDto updateDto = new TravelNameUpdateDto();
updateDto.setTravelName("친구들과 함께 여행");
String memberEmail = "test1@gmail.com";
CommonException memberNotFound = new CommonException(ResponseCode.MEMBER_NOT_FOUND);
when(memberRepository.getMemberIdByEmail(anyString())).thenThrow(memberNotFound);
//when
assertThrows(CommonException.class, () -> {
travelService.modifyTravelName(travelId, updateDto, memberEmail);
});
//then
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(0)).modifyTravelName(1L, updateDto, 0L);
}
@Test
@Order(7)
@DisplayName("여행정보 서비스 여행명 수정 테스트")
public void 여행정보_서비스_여행명_수정_테스트(){
//given
Long travelId = 1L;
TravelNameUpdateDto updateDto = new TravelNameUpdateDto();
updateDto.setTravelName("친구들과 함께 여행");
String memberEmail = "test1@gmail.com";
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
when(travelRepository.modifyTravelName(anyLong(), any(TravelNameUpdateDto.class), anyLong())).thenReturn(1L);
//when
long result = travelService.modifyTravelName(travelId, updateDto, memberEmail);
//then
assertEquals(1L, result);
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(1)).modifyTravelName(1L, updateDto, 1L);
}
@Test
@Order(8)
@DisplayName("여행정보 서비스 여행정보 삭제 테스트")
public void 여행정보_서비스_여행정보_삭제_테스트(){
//given
Long travelId = 1L;
doNothing().when(travelRepository).deleteById(anyLong());
//when
travelService.removeTravel(travelId);
//then
verify(travelRepository, times(1)).deleteById(1L);
}
@Test
@Order(9)
@DisplayName("여행정보 서비스 여행정보 현황 페이징 회원정보 NULL 테스트")
public void 여행정보_서비스_여행정보_현황_페이징_회원정보_NULL_테스트(){
//given
String memberEmail = "test1@gmail.com";
int pageNumber = 0, pageSize = 15;
Pageable pageable = PageRequest.of(pageNumber, pageSize);
CommonException memberNotFound = new CommonException(ResponseCode.MEMBER_NOT_FOUND);
when(memberRepository.getMemberIdByEmail(anyString())).thenThrow(memberNotFound);
//when
assertThrows(CommonException.class, () -> {
travelService.findTravels(memberEmail, pageable);
});
//then
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(0)).getTravels(1L, pageable);
}
@Test
@Order(10)
@DisplayName("여행정보 서비스 여행정보 현황 페이징 테스트")
public void 여행정보_서비스_여행정보_현황_페이징_테스트(){
//given
String memberEmail = "test1@gmail.com";
int pageNumber = 0, pageSize = 15;
Pageable pageable = PageRequest.of(pageNumber, pageSize);
List<TravelResponseDto> travels = new ArrayList<>();
for(int i = 1 ; i <= 50 ; i++){
TravelResponseDto travel = new TravelResponseDto();
travel.setTravelId((long)i);
travel.setTravelName("여행명"+i);
travel.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter).plusDays((30*i)));
travel.setEndDate(LocalDateTime.parse("2024-06-04 23:59:59", formatter).plusDays((30*i)));
travels.add(travel);
}
Page<TravelResponseDto> savedTravels = new PageImpl<>(travels, pageable, travels.size());
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
when(travelRepository.getTravels(anyLong(), any(Pageable.class))).thenReturn(savedTravels);
//when
Map<String, Object> result = travelService.findTravels(memberEmail, pageable);
//then
assertEquals(travels.size()/pageSize+1, result.get("totalPage"));
assertEquals(50, (long)result.get("totalCount"));
assertEquals(pageNumber, result.get("currentPage"));
assertFalse((boolean)result.get("hasPrevious"));
assertTrue((boolean)result.get("hasNext"));
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(travelRepository, times(1)).getTravels(1L, pageable);
}
}
여행정보 - Controller 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
@DisplayName("여행정보 Controller 테스트")
@SpringBootTest
@ActiveProfiles("local")
@AutoConfigureMockMvc
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelControllerMockTests {
@Autowired
MockMvc mockMvc;
@MockBean
TravelService travelService;
private DateTimeFormatter formatter;
@Autowired
ObjectMapper objectMapper;
private String accessToken;
private String memberEmail;
@BeforeEach
public void setUp(){
formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.KOREA);
accessToken = "Bearer ";
accessToken += "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0MUBnbWFpbC5jb20iLCJpYXQiOjE3MTcxMjQ4MjAsIkF1dGhvcml6YXRpb24iOiJVU0VSIiwiZXhwIjoxNzE3MTMyMDIwfQ.YUWeURkeaOdt0QKVCxdDpbc-nOhdm7HEIu4dr06achBWz4zXy8_Ifqf9dYUw7YoGed-6hF2XE71_rW1J2BY1RA";
memberEmail = "test1@gmail.com";
}
@Test
@Order(1)
@DisplayName("여행정보 컨트롤러 여행현황 회원정보 NULL 테스트")
public void 여행정보_컨트롤러_여행현황_회원정보_NULL_테스트() throws Exception {
//given
CommonException memberNotFound = new CommonException(ResponseCode.MEMBER_NOT_FOUND);
when(travelService.findTravels(anyString(), any(Pageable.class))).thenThrow(memberNotFound);
//when
ResultActions actions = mockMvc.perform(
get("/api/travel/travels")
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
);
//then
actions
.andExpect(status().isNotFound());
}
@Test
@Order(2)
@DisplayName("여행정보 컨트롤러 여행현황 테스트")
public void 여행정보_컨트롤러_여행현황_테스트() throws Exception {
//given
List<TravelResponseDto> content = new ArrayList<>();
for(int i = 1 ; i <= 50 ; i++){
TravelResponseDto travel = new TravelResponseDto();
travel.setTravelId((long)i);
travel.setTravelName("여행명"+i);
travel.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter).plusDays((30*i)));
travel.setEndDate(LocalDateTime.parse("2024-06-04 23:59:59", formatter).plusDays((30*i)));
content.add(travel);
}
Map<String, Object> response = new HashMap<>();
response.put("body", content);
response.put("totalPage", 4);
response.put("totalCount", 50);
response.put("currentPage", 0);
response.put("hasPrevious", false);
response.put("hasNext", true);
when(travelService.findTravels(anyString(), any(Pageable.class))).thenReturn(response);
//when
ResultActions actions = mockMvc.perform(
get("/api/travel/travels")
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(content))
);
//then
actions
.andExpect(status().isOk());
}
@Test
@Order(3)
@DisplayName("여행정보 컨트롤러 여행정보 등록 테스트")
public void 여행정보_컨트롤러_여행정보_등록_테스트() throws Exception {
//given
TravelCreateDto createDto = new TravelCreateDto();
createDto.setStartDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
createDto.setEndDate(LocalDateTime.parse("2024-06-03 23:59:59", formatter));
doNothing().when(travelService).createTravel(any(TravelCreateDto.class), anyString());
//when
ResultActions actions = mockMvc.perform(
post("/api/travel")
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(createDto))
);
//then
actions
.andExpect(status().isCreated());
}
@Test
@Order(4)
@DisplayName("여행정보 컨트롤러 여행정보 조회 테스트")
public void 여행정보_컨트롤러_여행정보_조회_테스트() throws Exception {
//given
Long travelId = 1L;
TravelResponseDto responseDto = new TravelResponseDto();
responseDto.setTravelId(travelId);
responseDto.setTravelName("친구와 여행");
responseDto.setStartDate(LocalDateTime.parse("2024-06-03 00:00:00", formatter));
responseDto.setEndDate(LocalDateTime.parse("2024-06-05 23:59:59", formatter));
when(travelService.findTravel(anyLong(), anyString())).thenReturn(responseDto);
//when
ResultActions actions = mockMvc.perform(
get("/api/travel/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
);
//then
actions
.andExpect(status().isOk());
}
@Test
@Order(5)
@DisplayName("여행정보 컨트롤러 여행일정 수정 테스트")
public void 여행정보_컨트롤러_여행일정_수정_테스트() throws Exception {
//given
Long travelId = 1L;
TravelScheduleUpdateDto updateDto = new TravelScheduleUpdateDto();
updateDto.setStartDate(LocalDateTime.parse("2024-06-03 00:00:00", formatter));
updateDto.setEndDate(LocalDateTime.parse("2024-06-05 23:59:59", formatter));
when(travelService.modifyTravelSchedule(anyLong(), any(TravelScheduleUpdateDto.class), anyString())).thenReturn(1L);
//when
ResultActions actions = mockMvc.perform(
patch("/api/travel/schedule/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(updateDto))
);
//then
actions
.andExpect(status().isNoContent());
}
@Test
@Order(6)
@DisplayName("여행정보 컨트롤러 여행명 수정 테스트")
public void 여행정보_컨트롤러_여행명_수정_테스트() throws Exception {
//given
Long travelId = 1L;
TravelNameUpdateDto updateDto = new TravelNameUpdateDto();
updateDto.setTravelName("대학 친구들과 여행");
when(travelService.modifyTravelName(anyLong(), any(TravelNameUpdateDto.class), anyString())).thenReturn(1L);
//when
ResultActions actions = mockMvc.perform(
patch("/api/travel/name/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(updateDto))
);
//then
actions
.andExpect(status().isNoContent());
}
@Test
@Order(7)
@DisplayName("여행정보 컨트롤러 여행정보 삭제 테스트")
public void 여행정보_컨트롤러_여행정보_삭제_테스트() throws Exception {
//given
Long travelId = 1L;
doNothing().when(travelService).removeTravel(anyLong());
//when
ResultActions actions = mockMvc.perform(
delete("/api/travel/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
);
//then
actions
.andExpect(status().isNoContent());
}
}
슬라이스 테스트 - 여행지역
여행지역 - Repository 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
@DisplayName("여행지역 Repository 테스트")
@ExtendWith(MockitoExtension.class)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelRegionRepositoryMockTests {
@Mock
TravelRegionRepository travelCountryRepository;
@Test
@Order(1)
@DisplayName("여행지역 리포지토리 등록 테스트")
public void 여행지역_리포지토리_등록_테스트(){
//given
TravelRegion travelRegion = new TravelRegion();
travelRegion.setTravelRegionId(1L);
travelRegion.setTravelId(1L);
travelRegion.setRegionName("대구");
travelRegion.setCreatorId(1L);
TravelRegion savedTravelRegion = new TravelRegion();
savedTravelRegion.setTravelRegionId(1L);
savedTravelRegion.setTravelId(1L);
savedTravelRegion.setRegionName("대구");
savedTravelRegion.setCreatorId(1L);
when(travelCountryRepository.save(any(TravelRegion.class))).thenReturn(savedTravelRegion);
//when
TravelRegion result = travelCountryRepository.save(travelRegion);
//then
assertEquals(1L, result.getTravelRegionId());
assertEquals(1L, result.getTravelId());
assertEquals("대구", result.getRegionName());
assertEquals(1L, result.getCreatorId());
}
@Test
@Order(2)
@DisplayName("여행지역 리포지토리 여행별_조회 테스트")
public void 여행지역_리포지토리_여행별_조회_테스트(){
//given
Long travelId = 1L;
Sort sort = Sort.by(Sort.Order.asc("region_order"));
List<TravelRegion> findCountries = new ArrayList<>();
TravelRegion savedTravelRegion = new TravelRegion();
savedTravelRegion.setTravelRegionId(1L);
savedTravelRegion.setTravelId(1L);
savedTravelRegion.setRegionName("대구");
savedTravelRegion.setCreatorId(1L);
findCountries.add(savedTravelRegion);
savedTravelRegion = new TravelRegion();
savedTravelRegion.setTravelRegionId(2L);
savedTravelRegion.setTravelId(1L);
savedTravelRegion.setRegionName("여수");
savedTravelRegion.setCreatorId(1L);
findCountries.add(savedTravelRegion);
when(travelCountryRepository.findAllByTravelId(any(Long.class), any(Sort.class))).thenReturn(findCountries);
//when
List<TravelRegion> result = travelCountryRepository.findAllByTravelId(travelId, sort);
//then
assertEquals(2, result.size());
}
@Test
@Order(3)
@DisplayName("여행지역 리포지토리 수정 테스트")
public void 여행지역_리포지토리_수정_테스트(){
//given
Long countryId = 1L;
String countryName = "여수";
Long modifierId = 1L;
TravelRegionUpdateDto updateDto = new TravelRegionUpdateDto("여수", 1);
Long updateCount = 1L;
when(travelCountryRepository.modifyTravelRegion(any(Long.class), any(TravelRegionUpdateDto.class), any(Long.class)))
.thenReturn(updateCount);
//when
Long result = travelCountryRepository.modifyTravelRegion(countryId, updateDto, modifierId);
//then
assertEquals(1L, result);
}
@Test
@Order(4)
@DisplayName("여행지역 리포지토리 삭제 테스트")
public void 여행지역_리포지토리_삭제_테스트(){
//given
Long countryId = 1L;
doNothing().when(travelCountryRepository).deleteById(any(Long.class));
//when
travelCountryRepository.deleteById(countryId);
//then
verify(travelCountryRepository).deleteById(any(Long.class));
}
}
여행지역 - Service 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
@DisplayName("여행 지역 Service 테스트")
@ExtendWith(MockitoExtension.class)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelRegionServiceMockTests {
@InjectMocks
TravelRegionService travelRegionService;
@Mock
TravelRegionRepository regionRepository;
@Mock
MemberRepository memberRepository;
@Test
@Order(1)
@DisplayName("여행지역 서비스 여행정보별 지역 현황 테스트")
public void 여행지역_서비스_여행정보별_지역_현황_테스트(){
//given
Long travelId = 1L;
TravelRegion savedRegion1 = new TravelRegion();
savedRegion1.setTravelRegionId(1L);
savedRegion1.setRegionName("대구");
savedRegion1.setRegionOrder(1);
TravelRegion savedRegion2 = new TravelRegion();
savedRegion2.setTravelRegionId(2L);
savedRegion2.setRegionName("서울");
savedRegion2.setRegionOrder(2);
List<TravelRegion> savedRegions = new ArrayList<>();
savedRegions.add(savedRegion1);
savedRegions.add(savedRegion2);
when(regionRepository.findAllByTravelId(anyLong(), any(Sort.class))).thenReturn(savedRegions);
//when
List<TravelRegionResponseDto> result = travelRegionService.findTravelRegionsByTravelId(travelId);
//then
assertEquals(2, result.size());
verify(regionRepository, times(1))
.findAllByTravelId(1L, Sort.by(Sort.Order.asc("region_order")));
}
@Test
@Order(2)
@DisplayName("여행지역 서비스 지역 등록 테스트1")
public void 여행지역_서비스_지역_등록_테스트1(){
//given
Long travelId = 1L;
String[] regions = {"대구", "서울"};
Long creatorId = 1L;
//when
travelRegionService.createTravelRegions(travelId, regions, creatorId);
//then
verify(regionRepository, times(2)).save(any(TravelRegion.class));
}
@Test
@Order(3)
@DisplayName("여행지역 서비스 지역 등록 테스트2")
public void 여행지역_서비스_지역_등록_테스트2(){
//given
Long travelId = 1L;
String memberEmail = "test1@gmail.com";
TravelRegionsCreateDto createDto = new TravelRegionsCreateDto();
createDto.setRegionNames(new String[]{"서울", "대전", "대구", "부산"});
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
//when
travelRegionService.createTravelRegions(travelId, createDto, memberEmail);
//then
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(regionRepository, times(4)).save(any(TravelRegion.class));
}
@Test
@Order(4)
@DisplayName("여행지역 서비스 지역 수정 테스트")
public void 여행지역_서비스_지역_수정_테스트(){
//given
Long travelId = 1L;
String memberEmail = "test1@gmail.com";
TravelRegionsUpdateDto updateDto = new TravelRegionsUpdateDto();
updateDto.setRegionNames(new String[]{"대구", "인천", "여수"});
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
//when
travelRegionService.modifyTravelRegions(travelId, updateDto, memberEmail);
//then
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(regionRepository, times(1)).deleteByTravelId(1L);
verify(regionRepository, times(3)).save(any(TravelRegion.class));
}
}
여행지역 - Controller 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
@DisplayName("여행지역 Controller 테스트")
@SpringBootTest
@ActiveProfiles("local")
@AutoConfigureMockMvc
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelRegionControllerMockTests {
@Autowired
MockMvc mockMvc;
@MockBean
TravelRegionService travelRegionService;
@Autowired
ObjectMapper objectMapper;
private String accessToken;
@BeforeEach
public void setUp(){
accessToken = "Bearer ";
accessToken += "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0MUBnbWFpbC5jb20iLCJpYXQiOjE3MTcyMTM1MTksIkF1dGhvcml6YXRpb24iOiJVU0VSIiwiZXhwIjoxNzE3Mjk5OTE5fQ.o3HxOPYp2LyGrCRATvI74juqotBOp9k8VtkkHSShq987w5AmDk2ZzNoTmF82wy0h1yd0j59iMMlcQ7BjlfuNcQ";
}
@Test
@Order(1)
@DisplayName("여행지역 컨트롤러 여행지역 현황 테스트")
public void 여행지역_컨트롤러_여행지역_현황_테스트() throws Exception {
//given
Long travelId = 1L;
List<TravelRegionResponseDto> savedRegions = new ArrayList<>();
TravelRegionResponseDto savedRegion1 = new TravelRegionResponseDto();
savedRegion1.setTravelRegionId(1L);
savedRegion1.setRegionName("대구");
savedRegion1.setRegionOrder(1);
savedRegions.add(savedRegion1);
TravelRegionResponseDto savedRegion2 = new TravelRegionResponseDto();
savedRegion2.setTravelRegionId(2L);
savedRegion2.setRegionName("서울");
savedRegion2.setRegionOrder(2);
savedRegions.add(savedRegion2);
when(travelRegionService.findTravelRegionsByTravelId(anyLong())).thenReturn(savedRegions);
//when
ResultActions actions = mockMvc.perform(
get("/api/travel-region/regions/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
);
//then
actions
.andExpect(status().isOk());
}
@Test
@Order(2)
@DisplayName("여행지역 컨트롤러 여행지역 등록 테스트")
public void 여행지역_컨트롤러_여행지역_등록_테스트() throws Exception {
//given
Long travelId = 1L;
TravelRegionsCreateDto createDto = new TravelRegionsCreateDto();
createDto.setRegionNames(new String[]{"대구", "서울"});
doNothing().when(travelRegionService).createTravelRegions(anyLong(), any(TravelRegionsCreateDto.class), anyString());
//when
ResultActions actions = mockMvc.perform(
post("/api/travel-region/regions/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(createDto))
);
//then
actions
.andExpect(status().isCreated());
}
@Test
@Order(3)
@DisplayName("여행지역 컨트롤러 여행지역 수정 테스트")
public void 여행지역_컨트롤러_여행지역_수정_테스트() throws Exception {
//given
Long travelId = 1L;
TravelRegionsUpdateDto updateDto = new TravelRegionsUpdateDto();
updateDto.setRegionNames(new String[]{"대구", "서울"});
doNothing().when(travelRegionService).modifyTravelRegions(anyLong(), any(TravelRegionsUpdateDto.class), anyString());
//when
ResultActions actions = mockMvc.perform(
put("/api/travel-region/regions/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(updateDto))
);
//then
actions
.andExpect(status().isNoContent());
}
}
슬라이스 테스트 - 여행계획
여행계획 - Repository 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
@DisplayName("여행계획 리포지토리 테스트")
@ExtendWith(MockitoExtension.class)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelPlanRepositoryMockTests {
@Mock
TravelPlanRepository planRepository;
private DateTimeFormatter formatter;
private TravelPlan savedPlan;
private TravelPlan savedPlan2;
@BeforeEach
public void setUp(){
formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.KOREA);
Point point = GeometryUtils.createLocationPoint(128.583052, 35.798838);
savedPlan = new TravelPlan();
savedPlan.setPlanId(1L);
savedPlan.setTravelId(1L);
savedPlan.setLocationName("식당1");
savedPlan.setLocationPoint(GeometryUtils.createLocationPoint(128.583052, 35.798838));
savedPlan.setLocationCategory("식당");
savedPlan.setLocationAddress("대구 남구 대명동 OOO");
savedPlan.setLocationRoadAddress("대구 남구 대명로 OOO");
savedPlan.setLocationTelephone("070-0000-0000");
savedPlan.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedPlan.setPlanOrder(1);
savedPlan.setCreatorId(1L);
savedPlan.setCreateDate(LocalDateTime.parse("2024-05-20 00:00:00", formatter));
savedPlan2 = new TravelPlan();
savedPlan2.setPlanId(2L);
savedPlan2.setTravelId(1L);
savedPlan2.setLocationName("식당2");
savedPlan2.setLocationPoint(point);
savedPlan2.setLocationCategory("식당");
savedPlan2.setLocationAddress("대구 남구 대명동 OOO");
savedPlan2.setLocationRoadAddress("대구 남구 대명로 OOO");
savedPlan2.setLocationTelephone("070-0000-0000");
savedPlan2.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedPlan2.setPlanOrder(2);
savedPlan2.setCreatorId(1L);
savedPlan2.setCreateDate(LocalDateTime.parse("2024-05-20 00:00:00", formatter));
}
@Test
@Order(1)
@DisplayName("여행계획 리포지토리 여행정보별 계획 현황 테스트")
public void 여행계획_리포지토리_여행정보별_계획_현황_테스트(){
//given
Long travelId = 1L;
Sort sort = Sort.by(Sort.Order.asc("plan_date"), Sort.Order.asc("plan_order"));
List<TravelPlan> plans = new ArrayList<>();
plans.add(savedPlan);
plans.add(savedPlan2);
when(planRepository.findTravelPlansByTravelId(anyLong(), any(Sort.class))).thenReturn(plans);
//when
List<TravelPlan> result = planRepository.findTravelPlansByTravelId(travelId, sort);
//then
assertEquals(2, result.size());
}
@Test
@Order(2)
@DisplayName("여행계획 리포지토리 계획 등록 테스트")
public void 여행계획_리포지토리_계획_등록_테스트(){
//given
when(planRepository.save(any(TravelPlan.class))).thenReturn(savedPlan);
//when
TravelPlan result = planRepository.save(savedPlan);
//then
assertEquals(1L, result.getPlanId());
assertEquals(1L, result.getTravelId());
assertEquals("식당1", result.getLocationName());
assertEquals(128.583052, result.getLocationPoint().getX());
assertEquals(35.798838, result.getLocationPoint().getY());
assertEquals("식당", result.getLocationCategory());
assertEquals("대구 남구 대명동 OOO", result.getLocationAddress());
assertEquals("대구 남구 대명로 OOO", result.getLocationRoadAddress());
assertEquals("070-0000-0000", result.getLocationTelephone());
assertEquals(1, result.getPlanOrder());
assertEquals(1L, result.getCreatorId());
assertEquals(LocalDateTime.parse("2024-06-01 00:00:00", formatter), result.getPlanDate());
assertEquals(LocalDateTime.parse("2024-05-20 00:00:00", formatter), result.getCreateDate());
}
@Test
@Order(3)
@DisplayName("여행계획 리포지토리 계획 조회 테스트")
public void 여행계획_리포지토리_계획_조회_테스트(){
//given
Long planId = 1L;
when(planRepository.findById(anyLong())).thenReturn(Optional.of(savedPlan));
//when
TravelPlan result = planRepository.findById(planId).get();
//then
assertEquals(1L, result.getPlanId());
assertEquals(1L, result.getTravelId());
assertEquals("식당1", result.getLocationName());
assertEquals(128.583052, result.getLocationPoint().getX());
assertEquals(35.798838, result.getLocationPoint().getY());
assertEquals("식당", result.getLocationCategory());
assertEquals("대구 남구 대명동 OOO", result.getLocationAddress());
assertEquals("대구 남구 대명로 OOO", result.getLocationRoadAddress());
assertEquals("070-0000-0000", result.getLocationTelephone());
assertEquals(1, result.getPlanOrder());
assertEquals(1L, result.getCreatorId());
assertEquals(LocalDateTime.parse("2024-06-01 00:00:00", formatter), result.getPlanDate());
assertEquals(LocalDateTime.parse("2024-05-20 00:00:00", formatter), result.getCreateDate());
}
@Test
@Order(4)
@DisplayName("여행계획 리포지토리 계획 순서변경 테스트")
public void 여행계획_리포지토리_계획_순서변경_테스트(){
//given
Long planId = 1L, travelId = 1L;
Integer planOrder = 2;
when(planRepository.findById(anyLong())).thenReturn(Optional.of(savedPlan));
when(planRepository.findByTravelIdAndPlanOrder(anyLong(), anyInt())).thenReturn(Optional.of(savedPlan2));
//when
TravelPlan result = planRepository.findById(planId).get();
result.modifyPlanOrder(planOrder, 1L);
TravelPlan result2 = planRepository.findByTravelIdAndPlanOrder(travelId, planOrder).get();
result2.modifyPlanOrder(result.getPlanOrder(), 1L);
//then
verify(planRepository, times(1)).findById(1L);
verify(planRepository, times(1)).findByTravelIdAndPlanOrder(1L, 2);
}
@Test
@Order(5)
@DisplayName("여행계획 리포지토리 계획 수정 테스트")
public void 여행계획_리포지토리_계획_수정_테스트(){
//given
Long planId = 1L;
Long modifierId = 1L;
TravelPlanUpdateDto updateDto = new TravelPlanUpdateDto();
updateDto.setLocationName("OOO 박물관");
updateDto.setLatitude(35.798838);
updateDto.setLongitude(128.583052);
updateDto.setLocationCategory("관광");
updateDto.setLocationAddress("대구 달성군 OOO");
updateDto.setLocationRoadAddress("대구 달성군 달성로 OOO");
updateDto.setLocationTelephone("070-0000-0000");
updateDto.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
when(planRepository.modifyTravelPlan(anyLong(), any(TravelPlanUpdateDto.class), anyLong())).thenReturn(1L);
//when
Long result = planRepository.modifyTravelPlan(planId, updateDto, modifierId);
//then
assertEquals(1, result);
}
@Test
@Order(6)
@DisplayName("여행계획 리포지토리 계획 삭제 테스트")
public void 여행계획_리포지토리_계획_삭제_테스트(){
//given
Long planId = 1L;
doNothing().when(planRepository).deleteById(anyLong());
//when
planRepository.deleteById(planId);
//then
verify(planRepository).deleteById(1L);
}
}
여행계획 - Service 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
@DisplayName("여행계획 서비스 테스트")
@ExtendWith(MockitoExtension.class)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelPlanServiceMockTests {
@InjectMocks
TravelPlanService planService;
@Mock
TravelPlanRepository planRepository;
@Mock
MemberRepository memberRepository;
private DateTimeFormatter formatter;
private TravelPlan savedPlan;
private TravelPlan savedPlan2;
@BeforeEach
public void setUp(){
formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.KOREA);
Point point = GeometryUtils.createLocationPoint(128.583052, 35.798838);
savedPlan = new TravelPlan();
savedPlan.setPlanId(1L);
savedPlan.setTravelId(1L);
savedPlan.setLocationName("식당1");
savedPlan.setLocationPoint(GeometryUtils.createLocationPoint(128.583052, 35.798838));
savedPlan.setLocationCategory("식당");
savedPlan.setLocationAddress("대구 남구 대명동 OOO");
savedPlan.setLocationRoadAddress("대구 남구 대명로 OOO");
savedPlan.setLocationTelephone("070-0000-0000");
savedPlan.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedPlan.setPlanOrder(1);
savedPlan.setCreatorId(1L);
savedPlan.setCreateDate(LocalDateTime.parse("2024-05-20 00:00:00", formatter));
savedPlan2 = new TravelPlan();
savedPlan2.setPlanId(2L);
savedPlan2.setTravelId(1L);
savedPlan2.setLocationName("식당2");
savedPlan2.setLocationPoint(point);
savedPlan2.setLocationCategory("식당");
savedPlan2.setLocationAddress("대구 남구 대명동 OOO");
savedPlan2.setLocationRoadAddress("대구 남구 대명로 OOO");
savedPlan2.setLocationTelephone("070-0000-0000");
savedPlan2.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedPlan2.setPlanOrder(2);
savedPlan2.setCreatorId(1L);
savedPlan2.setCreateDate(LocalDateTime.parse("2024-05-20 00:00:00", formatter));
}
@Test
@Order(1)
@DisplayName("여행계획 리포지토리 여행정보별 계획 현황 테스트")
public void 여행계획_리포지토리_여행정보별_계획_현황_테스트(){
//given
Long travelId = 1L;
Sort sort = Sort.by(Sort.Order.asc("plan_date"), Sort.Order.asc("plan_order"));
List<TravelPlan> savedPlans = new ArrayList<>();
savedPlans.add(savedPlan);
savedPlans.add(savedPlan2);
when(planRepository.findTravelPlansByTravelId(anyLong(), any(Sort.class))).thenReturn(savedPlans);
//when
List<TravelPlanResponseDto> result = planService.findTravelPlansByTravelId(travelId);
//then
assertEquals(2, result.size());
verify(planRepository, times(1)).findTravelPlansByTravelId(1L, sort);
}
@Test
@Order(2)
@DisplayName("여행계획 리포지토리 여행정보별 계획 등록 테스트")
public void 여행계획_리포지토리_여행정보별_계획_등록_테스트(){
//given
Long travelId = 1L;
String planDate = DateUtils.convertString(LocalDateTime.parse("2024-06-01 00:00:00", formatter), "yyyy-MM-dd");
String memberEmail = "test1@gmail.com";
TravelPlanCreateDto createDto = new TravelPlanCreateDto();
createDto.setLocationName("식당1");
createDto.setLongitude(35.798838);
createDto.setLatitude(128.583052);
createDto.setLocationCategory("식당");
createDto.setLocationAddress("대구 남구 대명동 OOO");
createDto.setLocationRoadAddress("대구 남구 대명로 OOO");
createDto.setLocationTelephone("070-0000-0000");
createDto.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
when(planRepository.getMaxTravelPlanOrder(anyLong(), anyString())).thenReturn((int) 0);
when(planRepository.save(any(TravelPlan.class))).thenReturn(savedPlan);
//when
Long result = planService.createTravelPlan(travelId, createDto, memberEmail);
//then
assertEquals(1L, result);
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(planRepository, times(1)).getMaxTravelPlanOrder(1L, planDate);
verify(planRepository, times(1)).save(any(TravelPlan.class));
}
@Test
@Order(3)
@DisplayName("여행계획 리포지토리 여행정보별 계획 조회 테스트")
public void 여행계획_리포지토리_여행정보별_계획_조회_테스트(){
//given
Long planId = 1L;
TravelPlanCreateDto createDto = new TravelPlanCreateDto();
createDto.setLocationName("식당1");
createDto.setLongitude(128.583052);
createDto.setLatitude(35.798838);
createDto.setLocationCategory("식당");
createDto.setLocationAddress("대구 남구 대명동 OOO");
createDto.setLocationRoadAddress("대구 남구 대명로 OOO");
createDto.setLocationTelephone("070-0000-0000");
createDto.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
when(planRepository.findById(anyLong())).thenReturn(Optional.ofNullable(savedPlan));
//when
TravelPlanResponseDto result = planService.findTravelPlan(planId);
//then
assertEquals(1L, result.getPlanId());
assertEquals("식당1", result.getLocationName());
assertEquals(128.583052, result.getLongitude());
assertEquals(35.798838, result.getLatitude());
assertEquals("식당", result.getLocationCategory());
assertEquals("대구 남구 대명동 OOO", result.getLocationAddress());
assertEquals("대구 남구 대명로 OOO", result.getLocationRoadAddress());
assertEquals("070-0000-0000", result.getLocationTelephone());
assertEquals(LocalDateTime.parse("2024-06-01 00:00:00", formatter), result.getPlanDate());
assertEquals(1, result.getPlanOrder());
verify(planRepository, times(1)).findById(1L);
}
@Test
@Order(4)
@DisplayName("여행계획 리포지토리 여행계획 수정 테스트")
public void 여행계획_리포지토리_여행계획_수정_테스트(){
//given
Long travelId = 1L;
String memberEmail = "test1@gmail.com";
TravelPlanUpdateDto updateDto = new TravelPlanUpdateDto();
updateDto.setLocationName("식당1");
updateDto.setLongitude(128.583052);
updateDto.setLatitude(35.798838);
updateDto.setLocationCategory("식당");
updateDto.setLocationAddress("대구 남구 대명동 OOO");
updateDto.setLocationRoadAddress("대구 남구 대명로 OOO");
updateDto.setLocationTelephone("070-0000-0000");
updateDto.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
when(memberRepository.getMemberIdByEmail(anyString())).thenReturn(1L);
when(planRepository.modifyTravelPlan(anyLong(), any(TravelPlanUpdateDto.class), anyLong())).thenReturn(1L);
//when
Long result = planService.modifyTravelPlan(travelId, updateDto, memberEmail);
//then
assertEquals(1L, result);
verify(memberRepository, times(1)).getMemberIdByEmail("test1@gmail.com");
verify(planRepository, times(1)).modifyTravelPlan(1L, updateDto, 1L);
}
}
여행계획 - Controller 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
@DisplayName("여행계획 Controller 테스트")
@SpringBootTest
@ActiveProfiles("local")
@AutoConfigureMockMvc
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TravelPlanControllerMockTests {
@Autowired
MockMvc mockMvc;
@MockBean
TravelPlanService planService;
@Autowired
ObjectMapper objectMapper;
private DateTimeFormatter formatter;
private TravelPlanResponseDto savedPlan;
private TravelPlanResponseDto savedPlan2;
private TravelPlanCreateDto createDto;
private String accessToken;
@BeforeEach
public void setUp(){
accessToken = "Bearer ";
accessToken += "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0MUBnbWFpbC5jb20iLCJpYXQiOjE3MTcyMTM1MTksIkF1dGhvcml6YXRpb24iOiJVU0VSIiwiZXhwIjoxNzE3Mjk5OTE5fQ.o3HxOPYp2LyGrCRATvI74juqotBOp9k8VtkkHSShq987w5AmDk2ZzNoTmF82wy0h1yd0j59iMMlcQ7BjlfuNcQ";
formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.KOREA);
savedPlan = new TravelPlanResponseDto();
savedPlan.setPlanId(1L);
savedPlan.setLocationName("식당1");
savedPlan.setLongitude(128.583052);
savedPlan.setLatitude(35.798838);
savedPlan.setLocationCategory("식당");
savedPlan.setLocationAddress("대구 남구 대명동 OOO");
savedPlan.setLocationRoadAddress("대구 남구 대명로 OOO");
savedPlan.setLocationTelephone("070-0000-0000");
savedPlan.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedPlan.setPlanOrder(1);
savedPlan2 = new TravelPlanResponseDto();
savedPlan2.setPlanId(2L);
savedPlan2.setLocationName("식당2");
savedPlan.setLongitude(128.583052);
savedPlan.setLatitude(35.798838);
savedPlan2.setLocationCategory("식당");
savedPlan2.setLocationAddress("대구 남구 대명동 OOO");
savedPlan2.setLocationRoadAddress("대구 남구 대명로 OOO");
savedPlan2.setLocationTelephone("070-0000-0000");
savedPlan2.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
savedPlan2.setPlanOrder(2);
createDto = new TravelPlanCreateDto();
createDto.setLocationName("식당1");
createDto.setLongitude(128.583052);
createDto.setLatitude(35.798838);
createDto.setLocationCategory("식당");
createDto.setLocationAddress("대구 남구 대명동 OOO");
createDto.setLocationRoadAddress("대구 남구 대명로 OOO");
createDto.setLocationTelephone("070-0000-0000");
createDto.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
}
@Test
@Order(1)
@DisplayName("여행계획 컨트롤러 여행정보별 현황 조회 테스트")
public void 여행계획_컨트롤러_여행정보별_현황_조회_테스트() throws Exception {
//given
Long travelId = 1L;
List<TravelPlanResponseDto> savedPlans = new ArrayList<>();
savedPlans.add(savedPlan);
savedPlans.add(savedPlan2);
when(planService.findTravelPlansByTravelId(anyLong())).thenReturn(savedPlans);
//when
ResultActions actions = mockMvc.perform(
get("/api/travel-plan/plans/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
);
//then
actions
.andExpect(status().isOk());
}
@Test
@Order(2)
@DisplayName("여행계획 컨트롤러 여행정보별 등록 테스트")
public void 여행계획_컨트롤러_여행정보별_등록_테스트() throws Exception {
//given
Long travelId = 1L;
List<TravelPlanResponseDto> savedPlans = new ArrayList<>();
savedPlans.add(savedPlan);
savedPlans.add(savedPlan2);
when(planService.createTravelPlan(anyLong(), any(TravelPlanCreateDto.class), anyString())).thenReturn(1L);
//when
ResultActions actions = mockMvc.perform(
post("/api/travel-plan/"+travelId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(createDto))
);
//then
actions
.andExpect(status().isCreated());
}
@Test
@Order(3)
@DisplayName("여행계획 컨트롤러 여행계획 조회 테스트")
public void 여행계획_컨트롤러_여행계획_조회_테스트() throws Exception {
//given
Long planId = 1L;
when(planService.findTravelPlan(anyLong())).thenReturn(savedPlan);
//when
ResultActions actions = mockMvc.perform(
get("/api/travel-plan/"+planId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
);
//then
actions
.andExpect(status().isOk());
}
@Test
@Order(4)
@DisplayName("여행계획 컨트롤러 여행계획 수정 테스트")
public void 여행계획_컨트롤러_여행계획_수정_테스트() throws Exception {
//given
Long planId = 1L;
TravelPlanUpdateDto updateDto = new TravelPlanUpdateDto();
updateDto.setLocationName("식당1");
updateDto.setLongitude(128.583052);
updateDto.setLatitude(35.798838);
updateDto.setLocationCategory("식당");
updateDto.setLocationAddress("대구 남구 대명동 OOO");
updateDto.setLocationRoadAddress("대구 남구 대명로 OOO");
updateDto.setLocationTelephone("070-0000-0000");
updateDto.setPlanDate(LocalDateTime.parse("2024-06-01 00:00:00", formatter));
when(planService.modifyTravelPlan(anyLong(), any(TravelPlanUpdateDto.class), anyString())).thenReturn(1L);
//when
ResultActions actions = mockMvc.perform(
put("/api/travel-plan/"+planId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(updateDto))
);
//then
actions
.andExpect(status().isNoContent());
}
@Test
@Order(5)
@DisplayName("여행계획 컨트롤러 여행계획 순서변경 테스트")
public void 여행계획_컨트롤러_여행계획_순서변경_테스트() throws Exception {
//given
Long planId = 1L;
TravelPlanOrderUpdateDto updateDto = new TravelPlanOrderUpdateDto();
updateDto.setPlanOrder(2);
doNothing().when(planService).modifyTravelPlanOrder(anyLong(), any(TravelPlanOrderUpdateDto.class), anyString());
//when
ResultActions actions = mockMvc.perform(
patch("/api/travel-plan/plan-order/"+planId)
.accept(MediaType.APPLICATION_JSON)
.header("access-token", accessToken)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(updateDto))
);
//then
actions
.andExpect(status().isNoContent());
}
}
자동화 문서 도구 - Swagger (Spring Doc)
This post is licensed under CC BY 4.0 by the author.