Skip to content

Commit 08a9be2

Browse files
committed
Test: #117 베이스 기타 매물 수정 api test 코드 작성
1 parent 7fa578c commit 08a9be2

File tree

3 files changed

+149
-0
lines changed

3 files changed

+149
-0
lines changed

src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java

+62
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import com.ajou.hertz.domain.instrument.bass_guitar.constant.BassGuitarPreAmplifier;
5555
import com.ajou.hertz.domain.instrument.bass_guitar.dto.BassGuitarDto;
5656
import com.ajou.hertz.domain.instrument.bass_guitar.dto.request.BassGuitarFilterConditions;
57+
import com.ajou.hertz.domain.instrument.bass_guitar.dto.request.BassGuitarUpdateRequest;
5758
import com.ajou.hertz.domain.instrument.bass_guitar.dto.request.CreateNewBassGuitarRequest;
5859
import com.ajou.hertz.domain.instrument.constant.GuitarColor;
5960
import com.ajou.hertz.domain.instrument.constant.InstrumentCategory;
@@ -753,6 +754,47 @@ public InstrumentControllerTest(MockMvc mvc) {
753754
verifyEveryMocksShouldHaveNoMoreInteractions();
754755
}
755756

757+
@Test
758+
void 수정할_베이스_기타_정보가_주어지고_주어진_정보로_매물_정보를_수정한다() throws Exception {
759+
// given
760+
long userId = 1L;
761+
long bassGuitarId = 2L;
762+
BassGuitarUpdateRequest updateRequest = createBassGuitarUpdateRequest();
763+
BassGuitarDto expectedResult = createBassGuitarDto(bassGuitarId, userId);
764+
given(instrumentCommandService.updateBassGuitar(
765+
eq(userId),
766+
eq(bassGuitarId),
767+
any(BassGuitarUpdateRequest.class)
768+
)).willReturn(expectedResult);
769+
770+
// when & then
771+
mvc.perform(
772+
multipart("/api/instruments/bass-guitars/{bassGuitarId}", bassGuitarId)
773+
.header(API_VERSION_HEADER_NAME, 1)
774+
.param("title", updateRequest.getTitle())
775+
.param("progressStatus", String.valueOf(updateRequest.getProgressStatus()))
776+
.param("qualityStatus", String.valueOf(updateRequest.getQualityStatus()))
777+
.param("price", String.valueOf(updateRequest.getPrice()))
778+
.param("hasAnomaly", String.valueOf(updateRequest.getHasAnomaly()))
779+
.param("description", updateRequest.getDescription())
780+
.param("brand", String.valueOf(updateRequest.getBrand()))
781+
.param("pickUp", String.valueOf(updateRequest.getPickUp()))
782+
.param("preAmplifier", String.valueOf(updateRequest.getPreAmplifier()))
783+
.param("color", String.valueOf(updateRequest.getColor()))
784+
.with(user(createTestUser(userId)))
785+
.with(request -> {
786+
request.setMethod("PATCH");
787+
return request;
788+
})
789+
)
790+
.andExpect(status().isOk())
791+
.andExpect(jsonPath("$.id").value(expectedResult.getId()));
792+
then(instrumentCommandService)
793+
.should()
794+
.updateBassGuitar(eq(userId), eq(bassGuitarId), any(BassGuitarUpdateRequest.class));
795+
verifyEveryMocksShouldHaveNoMoreInteractions();
796+
}
797+
756798
@Test
757799
void 수정할_앰프_정보가_주어지고_주어진_정보로_매물_정보를_수정한다() throws Exception {
758800
// given
@@ -1289,4 +1331,24 @@ private AudioEquipmentUpdateRequest createAudioEquipmentUpdateRequest() throws E
12891331
);
12901332
}
12911333

1334+
private BassGuitarUpdateRequest createBassGuitarUpdateRequest() throws Exception {
1335+
return ReflectionUtils.createBassGuitarUpdateRequest(
1336+
"Test Bass Guitar",
1337+
InstrumentProgressStatus.SOLD_OUT,
1338+
createAddressRequest(),
1339+
(short)3,
1340+
550000,
1341+
true,
1342+
"description",
1343+
null,
1344+
null,
1345+
null,
1346+
null,
1347+
BassGuitarBrand.FENDER,
1348+
BassGuitarPickUp.JAZZ,
1349+
BassGuitarPreAmplifier.ACTIVE,
1350+
GuitarColor.RED
1351+
);
1352+
}
1353+
12921354
}

src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentCommandServiceTest.java

+44
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import com.ajou.hertz.domain.instrument.bass_guitar.constant.BassGuitarPickUp;
4747
import com.ajou.hertz.domain.instrument.bass_guitar.constant.BassGuitarPreAmplifier;
4848
import com.ajou.hertz.domain.instrument.bass_guitar.dto.BassGuitarDto;
49+
import com.ajou.hertz.domain.instrument.bass_guitar.dto.request.BassGuitarUpdateRequest;
4950
import com.ajou.hertz.domain.instrument.bass_guitar.dto.request.CreateNewBassGuitarRequest;
5051
import com.ajou.hertz.domain.instrument.bass_guitar.entity.BassGuitar;
5152
import com.ajou.hertz.domain.instrument.constant.GuitarColor;
@@ -487,6 +488,36 @@ class InstrumentCommandServiceTest {
487488
assertThat(result.getImages()).hasSize(newImages.size());
488489
}
489490

491+
@Test
492+
void 추가할_이미지들이_주어지고_베이스_기타_정보를_수정하면_새로운_악기_이미지들이_추가된다() throws Exception {
493+
// given
494+
long userId = 1L;
495+
long instrumentId = 2L;
496+
BassGuitar bassGuitar = createBassGuitar(instrumentId, createUser(userId));
497+
List<MultipartFile> newImages = List.of(
498+
createMultipartFile(),
499+
createMultipartFile()
500+
);
501+
List<InstrumentImage> newInstrumentImages = List.of(
502+
createInstrumentImage(3L, bassGuitar),
503+
createInstrumentImage(4L, bassGuitar)
504+
);
505+
BassGuitarUpdateRequest updateRequest = createBassGuitarUpdateRequest(List.of(), newImages, null, null);
506+
given(instrumentQueryService.getInstrumentById(instrumentId))
507+
.willReturn(bassGuitar);
508+
given(instrumentImageCommandService.saveImages(bassGuitar, updateRequest.getNewImages()))
509+
.willReturn(newInstrumentImages);
510+
511+
// when
512+
BassGuitarDto result = sut.updateBassGuitar(userId, instrumentId, updateRequest);
513+
514+
// then
515+
then(instrumentQueryService).should().getInstrumentById(instrumentId);
516+
then(instrumentImageCommandService).should().saveImages(bassGuitar, updateRequest.getNewImages());
517+
verifyEveryMocksShouldHaveNoMoreInteractions();
518+
assertThat(result.getImages()).hasSize(newImages.size());
519+
}
520+
490521
@Test
491522
void 삭제할_해시태그들의_id_리스트가_주어지고_매물_정보를_수정하면_해시태그가_삭제된다() throws Exception {
492523
long userId = 1L;
@@ -924,4 +955,17 @@ private AudioEquipmentUpdateRequest createAudioEquipmentUpdateRequest(
924955
null
925956
);
926957
}
958+
959+
private BassGuitarUpdateRequest createBassGuitarUpdateRequest(
960+
@Nullable List<Long> deletedImageIds,
961+
@Nullable List<MultipartFile> newImages,
962+
@Nullable List<Long> deletedHashtagIds,
963+
@Nullable List<String> newHashtags
964+
) throws Exception {
965+
return ReflectionUtils.createBassGuitarUpdateRequest(
966+
null, null, null, null, null, null, null,
967+
deletedImageIds, newImages, deletedHashtagIds, newHashtags,
968+
null, null, null, null
969+
);
970+
}
927971
}

src/test/java/com/ajou/hertz/util/ReflectionUtils.java

+43
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.ajou.hertz.domain.instrument.bass_guitar.constant.BassGuitarPreAmplifier;
5656
import com.ajou.hertz.domain.instrument.bass_guitar.dto.BassGuitarDto;
5757
import com.ajou.hertz.domain.instrument.bass_guitar.dto.request.BassGuitarFilterConditions;
58+
import com.ajou.hertz.domain.instrument.bass_guitar.dto.request.BassGuitarUpdateRequest;
5859
import com.ajou.hertz.domain.instrument.bass_guitar.dto.request.CreateNewBassGuitarRequest;
5960
import com.ajou.hertz.domain.instrument.bass_guitar.entity.BassGuitar;
6061
import com.ajou.hertz.domain.instrument.constant.GuitarColor;
@@ -1176,6 +1177,48 @@ public static AudioEquipmentUpdateRequest createAudioEquipmentUpdateRequest(
11761177
);
11771178
}
11781179

1180+
public static BassGuitarUpdateRequest createBassGuitarUpdateRequest(
1181+
@Nullable String title,
1182+
@Nullable InstrumentProgressStatus progressStatus,
1183+
@Nullable AddressRequest tradeAddress,
1184+
@Nullable Short qualityStatus,
1185+
@Nullable Integer price,
1186+
@Nullable Boolean hasAnomaly,
1187+
@Nullable String description,
1188+
@Nullable List<Long> deletedImageIds,
1189+
@Nullable List<MultipartFile> newImages,
1190+
@Nullable List<Long> deletedHashtagIds,
1191+
@Nullable List<String> newHashtags,
1192+
@Nullable BassGuitarBrand brand,
1193+
@Nullable BassGuitarPickUp pickUp,
1194+
@Nullable BassGuitarPreAmplifier preAmplifier,
1195+
@Nullable GuitarColor color
1196+
) throws Exception {
1197+
Constructor<BassGuitarUpdateRequest> constructor = BassGuitarUpdateRequest.class.getDeclaredConstructor(
1198+
String.class, InstrumentProgressStatus.class, AddressRequest.class, Short.class,
1199+
Integer.class, Boolean.class, String.class, List.class, List.class, List.class, List.class,
1200+
BassGuitarBrand.class, BassGuitarPickUp.class, BassGuitarPreAmplifier.class, GuitarColor.class
1201+
);
1202+
constructor.setAccessible(true);
1203+
return constructor.newInstance(
1204+
title,
1205+
progressStatus,
1206+
tradeAddress,
1207+
qualityStatus,
1208+
price,
1209+
hasAnomaly,
1210+
description,
1211+
deletedImageIds,
1212+
newImages,
1213+
deletedHashtagIds,
1214+
newHashtags,
1215+
brand,
1216+
pickUp,
1217+
preAmplifier,
1218+
color
1219+
);
1220+
}
1221+
11791222
public static SendUserAuthCodeRequest createSendUserAuthCodeRequest(String phoneNumber) throws Exception {
11801223
Constructor<SendUserAuthCodeRequest> constructor =
11811224
SendUserAuthCodeRequest.class.getDeclaredConstructor(String.class);

0 commit comments

Comments
 (0)