diff --git a/src/main/java/com/ajou/hertz/domain/instrument/controller/InstrumentController.java b/src/main/java/com/ajou/hertz/domain/instrument/controller/InstrumentController.java index 2b9ff33..3552da7 100644 --- a/src/main/java/com/ajou/hertz/domain/instrument/controller/InstrumentController.java +++ b/src/main/java/com/ajou/hertz/domain/instrument/controller/InstrumentController.java @@ -30,6 +30,7 @@ import com.ajou.hertz.domain.instrument.dto.request.CreateNewBassGuitarRequest; import com.ajou.hertz.domain.instrument.dto.request.CreateNewEffectorRequest; import com.ajou.hertz.domain.instrument.dto.request.CreateNewElectricGuitarRequest; +import com.ajou.hertz.domain.instrument.dto.request.InstrumentFilterConditions; import com.ajou.hertz.domain.instrument.dto.response.AcousticAndClassicGuitarResponse; import com.ajou.hertz.domain.instrument.dto.response.AmplifierResponse; import com.ajou.hertz.domain.instrument.dto.response.AudioEquipmentResponse; @@ -95,10 +96,11 @@ public Page findElectricGuitarsV1( ) @RequestParam int size, @Parameter( description = "정렬 기준" - ) @RequestParam InstrumentSortOption sort + ) @RequestParam InstrumentSortOption sort, + @ParameterObject @Valid @ModelAttribute InstrumentFilterConditions filterConditions ) { return instrumentQueryService - .findElectricGuitars(page, size, sort) + .findElectricGuitars(page, size, sort, filterConditions) .map(ElectricGuitarResponse::from); } @@ -118,10 +120,11 @@ public Page findBassGuitarsV1( ) @RequestParam int size, @Parameter( description = "정렬 기준" - ) @RequestParam InstrumentSortOption sort + ) @RequestParam InstrumentSortOption sort, + @ParameterObject @Valid @ModelAttribute InstrumentFilterConditions filterConditions ) { return instrumentQueryService - .findBassGuitars(page, size, sort) + .findBassGuitars(page, size, sort, filterConditions) .map(BassGuitarResponse::from); } @@ -141,10 +144,11 @@ public Page findAcousticAndClassicGuitarsV1( ) @RequestParam int size, @Parameter( description = "정렬 기준" - ) @RequestParam InstrumentSortOption sort + ) @RequestParam InstrumentSortOption sort, + @ParameterObject @Valid @ModelAttribute InstrumentFilterConditions filterConditions ) { return instrumentQueryService - .findAcousticAndClassicGuitars(page, size, sort) + .findAcousticAndClassicGuitars(page, size, sort, filterConditions) .map(AcousticAndClassicGuitarResponse::from); } @@ -164,10 +168,11 @@ public Page findEffectorsV1( ) @RequestParam int size, @Parameter( description = "정렬 기준" - ) @RequestParam InstrumentSortOption sort + ) @RequestParam InstrumentSortOption sort, + @ParameterObject @Valid @ModelAttribute InstrumentFilterConditions filterConditions ) { return instrumentQueryService - .findEffectors(page, size, sort) + .findEffectors(page, size, sort, filterConditions) .map(EffectorResponse::from); } @@ -175,8 +180,8 @@ public Page findEffectorsV1( summary = "앰프 매물 목록 조회", description = "앰프 매물 목록을 조회합니다." ) - @GetMapping(value = "/audio-equipments", headers = API_VERSION_HEADER_NAME + "=" + 1) - public Page findAudioEquipmentsV1( + @GetMapping(value = "/amplifiers", headers = API_VERSION_HEADER_NAME + "=" + 1) + public Page findAmplifiersV1( @Parameter( description = "페이지 번호. 0부터 시작합니다.", example = "0" @@ -187,19 +192,20 @@ public Page findAudioEquipmentsV1( ) @RequestParam int size, @Parameter( description = "정렬 기준" - ) @RequestParam InstrumentSortOption sort + ) @RequestParam InstrumentSortOption sort, + @ParameterObject @Valid @ModelAttribute InstrumentFilterConditions filterConditions ) { return instrumentQueryService - .findAudioEquipments(page, size, sort) - .map(AudioEquipmentResponse::from); + .findAmplifiers(page, size, sort, filterConditions) + .map(AmplifierResponse::from); } @Operation( summary = "음향 장비 매물 목록 조회", description = "음향 장비 매물 목록을 조회합니다." ) - @GetMapping(value = "/amplifiers", headers = API_VERSION_HEADER_NAME + "=" + 1) - public Page findAmplifiersV1( + @GetMapping(value = "/audio-equipments", headers = API_VERSION_HEADER_NAME + "=" + 1) + public Page findAudioEquipmentsV1( @Parameter( description = "페이지 번호. 0부터 시작합니다.", example = "0" @@ -210,11 +216,12 @@ public Page findAmplifiersV1( ) @RequestParam int size, @Parameter( description = "정렬 기준" - ) @RequestParam InstrumentSortOption sort + ) @RequestParam InstrumentSortOption sort, + @ParameterObject @Valid @ModelAttribute InstrumentFilterConditions filterConditions ) { return instrumentQueryService - .findAmplifiers(page, size, sort) - .map(AmplifierResponse::from); + .findAudioEquipments(page, size, sort, filterConditions) + .map(AudioEquipmentResponse::from); } @Operation( diff --git a/src/main/java/com/ajou/hertz/domain/instrument/dto/request/InstrumentFilterConditions.java b/src/main/java/com/ajou/hertz/domain/instrument/dto/request/InstrumentFilterConditions.java new file mode 100644 index 0000000..e2ad046 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/dto/request/InstrumentFilterConditions.java @@ -0,0 +1,18 @@ +package com.ajou.hertz.domain.instrument.dto.request; + +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@Setter // for @ModelAttribute +@Getter +public class InstrumentFilterConditions { + + private InstrumentProgressStatus progress; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustom.java b/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustom.java index bbc02aa..4f984d0 100644 --- a/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustom.java +++ b/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustom.java @@ -3,6 +3,7 @@ import org.springframework.data.domain.Page; import com.ajou.hertz.domain.instrument.constant.InstrumentSortOption; +import com.ajou.hertz.domain.instrument.dto.request.InstrumentFilterConditions; import com.ajou.hertz.domain.instrument.entity.AcousticAndClassicGuitar; import com.ajou.hertz.domain.instrument.entity.Amplifier; import com.ajou.hertz.domain.instrument.entity.AudioEquipment; @@ -12,17 +13,27 @@ public interface InstrumentRepositoryCustom { - Page findElectricGuitars(int page, int pageSize, InstrumentSortOption sort); + Page findElectricGuitars( + int page, int pageSize, InstrumentSortOption sort, InstrumentFilterConditions filterConditions + ); - Page findBassGuitars(int page, int pageSize, InstrumentSortOption sort); + Page findBassGuitars( + int page, int pageSize, InstrumentSortOption sort, InstrumentFilterConditions filterConditions + ); Page findAcousticAndClassicGuitars( - int page, int pageSize, InstrumentSortOption sort + int page, int pageSize, InstrumentSortOption sort, InstrumentFilterConditions filterConditions ); - Page findEffectors(int page, int pageSize, InstrumentSortOption sort); + Page findEffectors( + int page, int pageSize, InstrumentSortOption sort, InstrumentFilterConditions filterConditions + ); - Page findAmplifiers(int page, int pageSize, InstrumentSortOption sort); + Page findAmplifiers( + int page, int pageSize, InstrumentSortOption sort, InstrumentFilterConditions filterConditions + ); - Page findAudioEquipments(int page, int pageSize, InstrumentSortOption sort); + Page findAudioEquipments( + int page, int pageSize, InstrumentSortOption sort, InstrumentFilterConditions filterConditions + ); } diff --git a/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustomImpl.java b/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustomImpl.java index a34a420..2237f64 100644 --- a/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustomImpl.java +++ b/src/main/java/com/ajou/hertz/domain/instrument/repository/InstrumentRepositoryCustomImpl.java @@ -3,6 +3,7 @@ import static com.ajou.hertz.domain.instrument.entity.QInstrument.*; import static com.ajou.hertz.domain.user.entity.QUser.*; +import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -11,7 +12,9 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; import com.ajou.hertz.domain.instrument.constant.InstrumentSortOption; +import com.ajou.hertz.domain.instrument.dto.request.InstrumentFilterConditions; import com.ajou.hertz.domain.instrument.entity.AcousticAndClassicGuitar; import com.ajou.hertz.domain.instrument.entity.Amplifier; import com.ajou.hertz.domain.instrument.entity.AudioEquipment; @@ -21,6 +24,8 @@ import com.ajou.hertz.domain.instrument.entity.Instrument; import com.querydsl.core.types.Order; import com.querydsl.core.types.OrderSpecifier; +import com.querydsl.core.types.Predicate; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.PathBuilder; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -33,49 +38,82 @@ public class InstrumentRepositoryCustomImpl implements InstrumentRepositoryCusto private final JPAQueryFactory queryFactory; @Override - public Page findElectricGuitars(int page, int pageSize, InstrumentSortOption sort) { - return findInstrumentsByClassType(ElectricGuitar.class, page, pageSize, sort); + public Page findElectricGuitars( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { + return findInstrumentsByClassType(ElectricGuitar.class, page, pageSize, sort, filterConditions); } @Override - public Page findBassGuitars(int page, int pageSize, InstrumentSortOption sort) { - return findInstrumentsByClassType(BassGuitar.class, page, pageSize, sort); + public Page findBassGuitars( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { + return findInstrumentsByClassType(BassGuitar.class, page, pageSize, sort, filterConditions); } @Override public Page findAcousticAndClassicGuitars( - int page, int pageSize, InstrumentSortOption sort + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions ) { - return findInstrumentsByClassType(AcousticAndClassicGuitar.class, page, pageSize, sort); + return findInstrumentsByClassType(AcousticAndClassicGuitar.class, page, pageSize, sort, filterConditions); } @Override - public Page findEffectors(int page, int pageSize, InstrumentSortOption sort) { - return findInstrumentsByClassType(Effector.class, page, pageSize, sort); + public Page findEffectors( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { + return findInstrumentsByClassType(Effector.class, page, pageSize, sort, filterConditions); } @Override - public Page findAmplifiers(int page, int pageSize, InstrumentSortOption sort) { - return findInstrumentsByClassType(Amplifier.class, page, pageSize, sort); + public Page findAmplifiers( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { + return findInstrumentsByClassType(Amplifier.class, page, pageSize, sort, filterConditions); } @Override - public Page findAudioEquipments(int page, int pageSize, InstrumentSortOption sort) { - return findInstrumentsByClassType(AudioEquipment.class, page, pageSize, sort); + public Page findAudioEquipments( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { + return findInstrumentsByClassType(AudioEquipment.class, page, pageSize, sort, filterConditions); } private Page findInstrumentsByClassType( Class classType, int page, int pageSize, - InstrumentSortOption sort + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions ) { PageRequest pageable = PageRequest.of(page, pageSize, sort.toSort()); + List conditions = new ArrayList<>(); + conditions.add(instrument.instanceOf(classType)); + conditions.addAll(convertFilterConditions(filterConditions)); + List content = queryFactory .selectFrom(instrument) .join(instrument.seller, user).fetchJoin() - .where(instrument.instanceOf(classType)) + .where(conditions.toArray(Predicate[]::new)) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .orderBy(convertSortToOrderSpecifiers(pageable.getSort())) @@ -88,18 +126,28 @@ private Page findInstrumentsByClassType( queryFactory.select(instrument.count()) .from(instrument) .join(instrument.seller, user) - .where(instrument.instanceOf(classType)) + .where(conditions.toArray(Predicate[]::new)) .fetchOne() ).orElse(0L); return new PageImpl<>(content, pageable, totalCount); } - public OrderSpecifier[] convertSortToOrderSpecifiers(Sort sort) { + private OrderSpecifier[] convertSortToOrderSpecifiers(Sort sort) { return sort.stream() .map(order -> new OrderSpecifier<>( order.getDirection().isAscending() ? Order.ASC : Order.DESC, INSTRUMENT_PATH.getString(order.getProperty()) )).toArray(OrderSpecifier[]::new); } + + private List convertFilterConditions(InstrumentFilterConditions filterConditions) { + List res = new ArrayList<>(); + res.add(progressStatusFilterCondition(filterConditions.getProgress())); + return res; + } + + private BooleanExpression progressStatusFilterCondition(InstrumentProgressStatus progressStatus) { + return progressStatus != null ? instrument.progressStatus.eq(progressStatus) : null; + } } diff --git a/src/main/java/com/ajou/hertz/domain/instrument/service/InstrumentQueryService.java b/src/main/java/com/ajou/hertz/domain/instrument/service/InstrumentQueryService.java index 220fb36..621256b 100644 --- a/src/main/java/com/ajou/hertz/domain/instrument/service/InstrumentQueryService.java +++ b/src/main/java/com/ajou/hertz/domain/instrument/service/InstrumentQueryService.java @@ -13,6 +13,7 @@ import com.ajou.hertz.domain.instrument.dto.EffectorDto; import com.ajou.hertz.domain.instrument.dto.ElectricGuitarDto; import com.ajou.hertz.domain.instrument.dto.InstrumentDto; +import com.ajou.hertz.domain.instrument.dto.request.InstrumentFilterConditions; import com.ajou.hertz.domain.instrument.repository.InstrumentRepository; import lombok.RequiredArgsConstructor; @@ -30,41 +31,69 @@ public Page findInstruments(int page, int pageSize, InstrumentSor .map(InstrumentDto::from); } - public Page findElectricGuitars(int page, int pageSize, InstrumentSortOption sort) { + public Page findElectricGuitars( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { return instrumentRepository - .findElectricGuitars(page, pageSize, sort) + .findElectricGuitars(page, pageSize, sort, filterConditions) .map(ElectricGuitarDto::from); } - public Page findBassGuitars(int page, int pageSize, InstrumentSortOption sort) { + public Page findBassGuitars( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { return instrumentRepository - .findBassGuitars(page, pageSize, sort) + .findBassGuitars(page, pageSize, sort, filterConditions) .map(BassGuitarDto::from); } public Page findAcousticAndClassicGuitars( - int page, int pageSize, InstrumentSortOption sort + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions ) { return instrumentRepository - .findAcousticAndClassicGuitars(page, pageSize, sort) + .findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions) .map(AcousticAndClassicGuitarDto::from); } - public Page findEffectors(int page, int pageSize, InstrumentSortOption sort) { + public Page findEffectors( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { return instrumentRepository - .findEffectors(page, pageSize, sort) + .findEffectors(page, pageSize, sort, filterConditions) .map(EffectorDto::from); } - public Page findAmplifiers(int page, int pageSize, InstrumentSortOption sort) { + public Page findAmplifiers( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { return instrumentRepository - .findAmplifiers(page, pageSize, sort) + .findAmplifiers(page, pageSize, sort, filterConditions) .map(AmplifierDto::from); } - public Page findAudioEquipments(int page, int pageSize, InstrumentSortOption sort) { + public Page findAudioEquipments( + int page, + int pageSize, + InstrumentSortOption sort, + InstrumentFilterConditions filterConditions + ) { return instrumentRepository - .findAudioEquipments(page, pageSize, sort) + .findAudioEquipments(page, pageSize, sort, filterConditions) .map(AudioEquipmentDto::from); } } diff --git a/src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryCustomImplTest.java b/src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryTest.java similarity index 81% rename from src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryCustomImplTest.java rename to src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryTest.java index d4d766f..65e6cbf 100644 --- a/src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryCustomImplTest.java +++ b/src/test/java/com/ajou/hertz/integration/domain/instrument/repository/InstrumentRepositoryTest.java @@ -36,6 +36,7 @@ import com.ajou.hertz.domain.instrument.constant.GuitarColor; import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; import com.ajou.hertz.domain.instrument.constant.InstrumentSortOption; +import com.ajou.hertz.domain.instrument.dto.request.InstrumentFilterConditions; import com.ajou.hertz.domain.instrument.entity.AcousticAndClassicGuitar; import com.ajou.hertz.domain.instrument.entity.Amplifier; import com.ajou.hertz.domain.instrument.entity.AudioEquipment; @@ -53,13 +54,13 @@ @ActiveProfiles("test") @Import({QuerydslConfig.class, JpaConfig.class}) @DataJpaTest -class InstrumentRepositoryCustomImplTest { +class InstrumentRepositoryTest { private final InstrumentRepository sut; private final UserRepository userRepository; @Autowired - public InstrumentRepositoryCustomImplTest( + public InstrumentRepositoryTest( InstrumentRepository instrumentRepository, UserRepository userRepository ) { @@ -70,6 +71,9 @@ public InstrumentRepositoryCustomImplTest( @Test void 일렉_기타_목록을_조회한다() throws Exception { // given + InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; + InstrumentFilterConditions filterConditions = + createInstrumentFilterConditions(InstrumentProgressStatus.SELLING); User user = userRepository.save(createUser()); List savedInstruments = sut.saveAll(List.of( createBassGuitar(user), @@ -78,7 +82,7 @@ public InstrumentRepositoryCustomImplTest( )); // when - Page result = sut.findElectricGuitars(0, 10, InstrumentSortOption.CREATED_BY_DESC); + Page result = sut.findElectricGuitars(0, 10, sortOption, filterConditions); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -87,6 +91,8 @@ public InstrumentRepositoryCustomImplTest( @Test void 베이스_기타_목록을_조회한다() throws Exception { // given + InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); User user = userRepository.save(createUser()); List savedInstruments = sut.saveAll(List.of( createElectricGuitar(user), @@ -95,7 +101,7 @@ public InstrumentRepositoryCustomImplTest( )); // when - Page result = sut.findBassGuitars(0, 10, InstrumentSortOption.CREATED_BY_ASC); + Page result = sut.findBassGuitars(0, 10, sortOption, filterConditions); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -104,6 +110,8 @@ public InstrumentRepositoryCustomImplTest( @Test void 어쿠스틱_클래식_기타_목록을_조회한다() throws Exception { // given + InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); User user = userRepository.save(createUser()); List savedInstruments = sut.saveAll(List.of( createElectricGuitar(user), @@ -113,7 +121,7 @@ public InstrumentRepositoryCustomImplTest( // when Page result = sut.findAcousticAndClassicGuitars( - 0, 10, InstrumentSortOption.CREATED_BY_ASC + 0, 10, sortOption, filterConditions ); // then @@ -123,6 +131,8 @@ public InstrumentRepositoryCustomImplTest( @Test void 이펙터_목록을_조회한다() throws Exception { // given + InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); User user = userRepository.save(createUser()); List savedInstruments = sut.saveAll(List.of( createElectricGuitar(user), @@ -131,7 +141,7 @@ public InstrumentRepositoryCustomImplTest( )); // when - Page result = sut.findEffectors(0, 10, InstrumentSortOption.CREATED_BY_ASC); + Page result = sut.findEffectors(0, 10, sortOption, filterConditions); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -140,6 +150,8 @@ public InstrumentRepositoryCustomImplTest( @Test void 앰프_목록을_조회한다() throws Exception { // given + InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); User user = userRepository.save(createUser()); List savedInstruments = sut.saveAll(List.of( createElectricGuitar(user), @@ -148,7 +160,7 @@ public InstrumentRepositoryCustomImplTest( )); // when - Page result = sut.findAmplifiers(0, 10, InstrumentSortOption.CREATED_BY_ASC); + Page result = sut.findAmplifiers(0, 10, sortOption, filterConditions); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -157,6 +169,8 @@ public InstrumentRepositoryCustomImplTest( @Test void 음향_장비_목록을_조회한다() throws Exception { // given + InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_ASC; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); User user = userRepository.save(createUser()); List savedInstruments = sut.saveAll(List.of( createElectricGuitar(user), @@ -165,7 +179,7 @@ public InstrumentRepositoryCustomImplTest( )); // when - Page result = sut.findAudioEquipments(0, 10, InstrumentSortOption.CREATED_BY_ASC); + Page result = sut.findAudioEquipments(0, 10, sortOption, filterConditions); // then assertThat(result.getNumberOfElements()).isEqualTo(savedInstruments.size() - 1); @@ -334,4 +348,19 @@ private AudioEquipment createAudioEquipment(User seller) throws Exception { AudioEquipmentType.AUDIO_EQUIPMENT ); } + + private InstrumentFilterConditions createInstrumentFilterConditions() throws Exception { + Constructor instrumentFilterConditionsConstructor = + InstrumentFilterConditions.class.getDeclaredConstructor(); + instrumentFilterConditionsConstructor.setAccessible(true); + return instrumentFilterConditionsConstructor.newInstance(); + } + + private InstrumentFilterConditions createInstrumentFilterConditions(InstrumentProgressStatus progressStatus) throws + Exception { + Constructor instrumentFilterConditionsConstructor = + InstrumentFilterConditions.class.getDeclaredConstructor(InstrumentProgressStatus.class); + instrumentFilterConditionsConstructor.setAccessible(true); + return instrumentFilterConditionsConstructor.newInstance(progressStatus); + } } diff --git a/src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java b/src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java index 424bd71..1e784ca 100644 --- a/src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java +++ b/src/test/java/com/ajou/hertz/unit/domain/instrument/controller/InstrumentControllerTest.java @@ -63,6 +63,7 @@ import com.ajou.hertz.domain.instrument.dto.request.CreateNewBassGuitarRequest; import com.ajou.hertz.domain.instrument.dto.request.CreateNewEffectorRequest; import com.ajou.hertz.domain.instrument.dto.request.CreateNewElectricGuitarRequest; +import com.ajou.hertz.domain.instrument.dto.request.InstrumentFilterConditions; import com.ajou.hertz.domain.instrument.service.InstrumentCommandService; import com.ajou.hertz.domain.instrument.service.InstrumentQueryService; import com.ajou.hertz.domain.user.constant.Gender; @@ -91,29 +92,31 @@ public InstrumentControllerTest(MockMvc mvc) { void 전체_악기_매물_목록을_조회한다() throws Exception { // given long userId = 1L; - int pageNumber = 0; + int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; Page expectedResult = new PageImpl<>(List.of( createBassGuitarDto(2L, userId), createBassGuitarDto(3L, userId), createBassGuitarDto(4L, userId) )); - given(instrumentQueryService.findInstruments(pageNumber, pageSize, sortOption)).willReturn(expectedResult); + given(instrumentQueryService.findInstruments(page, pageSize, sortOption)).willReturn(expectedResult); // when & then mvc.perform( get("/api/instruments") .header(API_VERSION_HEADER_NAME, 1) - .param("page", String.valueOf(pageNumber)) + .param("page", String.valueOf(page)) .param("size", String.valueOf(pageSize)) .param("sort", sortOption.name()) + .param("progress", filterConditions.getProgress().name()) ) .andExpect(status().isOk()) .andExpect(jsonPath("$.numberOfElements").value(expectedResult.getNumberOfElements())) .andExpect(jsonPath("$.content").isArray()) .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); - then(instrumentQueryService).should().findInstruments(pageNumber, pageSize, sortOption); + then(instrumentQueryService).should().findInstruments(page, pageSize, sortOption); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -121,29 +124,35 @@ public InstrumentControllerTest(MockMvc mvc) { void 일렉_기타_매물_목록을_조회한다() throws Exception { // given long userId = 1L; - int pageNumber = 0; + int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; Page expectedResult = new PageImpl<>(List.of( createElectricGuitarDto(2L, userId), createElectricGuitarDto(3L, userId), createElectricGuitarDto(4L, userId) )); - given(instrumentQueryService.findElectricGuitars(pageNumber, pageSize, sortOption)).willReturn(expectedResult); + given(instrumentQueryService.findElectricGuitars( + eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class) + )).willReturn(expectedResult); // when & then mvc.perform( get("/api/instruments/electric-guitars") .header(API_VERSION_HEADER_NAME, 1) - .param("page", String.valueOf(pageNumber)) + .param("page", String.valueOf(page)) .param("size", String.valueOf(pageSize)) .param("sort", sortOption.name()) + .param("progress", filterConditions.getProgress().name()) ) .andExpect(status().isOk()) .andExpect(jsonPath("$.numberOfElements").value(expectedResult.getNumberOfElements())) .andExpect(jsonPath("$.content").isArray()) .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); - then(instrumentQueryService).should().findElectricGuitars(pageNumber, pageSize, sortOption); + then(instrumentQueryService) + .should() + .findElectricGuitars(eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -153,13 +162,16 @@ public InstrumentControllerTest(MockMvc mvc) { long userId = 1L; int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; Page expectedResult = new PageImpl<>(List.of( createBassGuitarDto(2L, userId), createBassGuitarDto(3L, userId), createBassGuitarDto(4L, userId) )); - given(instrumentQueryService.findBassGuitars(page, pageSize, sortOption)).willReturn(expectedResult); + given(instrumentQueryService.findBassGuitars( + eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class) + )).willReturn(expectedResult); // when & then mvc.perform( @@ -168,12 +180,15 @@ public InstrumentControllerTest(MockMvc mvc) { .param("page", String.valueOf(page)) .param("size", String.valueOf(pageSize)) .param("sort", sortOption.name()) + .param("progress", filterConditions.getProgress().name()) ) .andExpect(status().isOk()) .andExpect(jsonPath("$.numberOfElements").value(expectedResult.getNumberOfElements())) .andExpect(jsonPath("$.content").isArray()) .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); - then(instrumentQueryService).should().findBassGuitars(page, pageSize, sortOption); + then(instrumentQueryService) + .should() + .findBassGuitars(eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -183,14 +198,16 @@ public InstrumentControllerTest(MockMvc mvc) { long userId = 1L; int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; Page expectedResult = new PageImpl<>(List.of( createAcousticAndClassicGuitarDto(2L, userId), createAcousticAndClassicGuitarDto(3L, userId), createAcousticAndClassicGuitarDto(4L, userId) )); - given(instrumentQueryService.findAcousticAndClassicGuitars(page, pageSize, sortOption)) - .willReturn(expectedResult); + given(instrumentQueryService.findAcousticAndClassicGuitars( + eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class) + )).willReturn(expectedResult); // when & then mvc.perform( @@ -199,12 +216,17 @@ public InstrumentControllerTest(MockMvc mvc) { .param("page", String.valueOf(page)) .param("size", String.valueOf(pageSize)) .param("sort", sortOption.name()) + .param("progress", filterConditions.getProgress().name()) ) .andExpect(status().isOk()) .andExpect(jsonPath("$.numberOfElements").value(expectedResult.getNumberOfElements())) .andExpect(jsonPath("$.content").isArray()) .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); - then(instrumentQueryService).should().findAcousticAndClassicGuitars(page, pageSize, sortOption); + then(instrumentQueryService) + .should() + .findAcousticAndClassicGuitars( + eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class) + ); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -214,13 +236,16 @@ public InstrumentControllerTest(MockMvc mvc) { long userId = 1L; int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; Page expectedResult = new PageImpl<>(List.of( createEffectorDto(2L, userId), createEffectorDto(3L, userId), createEffectorDto(4L, userId) )); - given(instrumentQueryService.findEffectors(page, pageSize, sortOption)).willReturn(expectedResult); + given(instrumentQueryService.findEffectors( + eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class) + )).willReturn(expectedResult); // when & then mvc.perform( @@ -229,12 +254,15 @@ public InstrumentControllerTest(MockMvc mvc) { .param("page", String.valueOf(page)) .param("size", String.valueOf(pageSize)) .param("sort", sortOption.name()) + .param("progress", filterConditions.getProgress().name()) ) .andExpect(status().isOk()) .andExpect(jsonPath("$.numberOfElements").value(expectedResult.getNumberOfElements())) .andExpect(jsonPath("$.content").isArray()) .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); - then(instrumentQueryService).should().findEffectors(page, pageSize, sortOption); + then(instrumentQueryService) + .should() + .findEffectors(eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -244,13 +272,16 @@ public InstrumentControllerTest(MockMvc mvc) { long userId = 1L; int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; Page expectedResult = new PageImpl<>(List.of( createAmplifierDto(2L, userId), createAmplifierDto(3L, userId), createAmplifierDto(4L, userId) )); - given(instrumentQueryService.findAmplifiers(page, pageSize, sortOption)).willReturn(expectedResult); + given(instrumentQueryService.findAmplifiers( + eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class) + )).willReturn(expectedResult); // when & then mvc.perform( @@ -259,12 +290,15 @@ public InstrumentControllerTest(MockMvc mvc) { .param("page", String.valueOf(page)) .param("size", String.valueOf(pageSize)) .param("sort", sortOption.name()) + .param("progress", filterConditions.getProgress().name()) ) .andExpect(status().isOk()) .andExpect(jsonPath("$.numberOfElements").value(expectedResult.getNumberOfElements())) .andExpect(jsonPath("$.content").isArray()) .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); - then(instrumentQueryService).should().findAmplifiers(page, pageSize, sortOption); + then(instrumentQueryService) + .should() + .findAmplifiers(eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -274,13 +308,16 @@ public InstrumentControllerTest(MockMvc mvc) { long userId = 1L; int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sortOption = InstrumentSortOption.CREATED_BY_DESC; Page expectedResult = new PageImpl<>(List.of( createAudioEquipmentDto(2L, userId), createAudioEquipmentDto(3L, userId), createAudioEquipmentDto(4L, userId) )); - given(instrumentQueryService.findAudioEquipments(page, pageSize, sortOption)).willReturn(expectedResult); + given(instrumentQueryService.findAudioEquipments( + eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class) + )).willReturn(expectedResult); // when & then mvc.perform( @@ -289,12 +326,15 @@ public InstrumentControllerTest(MockMvc mvc) { .param("page", String.valueOf(page)) .param("size", String.valueOf(pageSize)) .param("sort", sortOption.name()) + .param("progress", filterConditions.getProgress().name()) ) .andExpect(status().isOk()) .andExpect(jsonPath("$.numberOfElements").value(expectedResult.getNumberOfElements())) .andExpect(jsonPath("$.content").isArray()) .andExpect(jsonPath("$.content", hasSize(expectedResult.getNumberOfElements()))); - then(instrumentQueryService).should().findAudioEquipments(page, pageSize, sortOption); + then(instrumentQueryService) + .should() + .findAudioEquipments(eq(page), eq(pageSize), eq(sortOption), any(InstrumentFilterConditions.class)); verifyEveryMocksShouldHaveNoMoreInteractions(); } @@ -443,8 +483,8 @@ public InstrumentControllerTest(MockMvc mvc) { CreateNewEffectorRequest request = createEffectorRequest(); EffectorDto expectedResult = createEffectorDto(2L, sellerId); given(instrumentCommandService.createNewEffector( - eq(sellerId), any(CreateNewEffectorRequest.class)) - ).willReturn(expectedResult); + eq(sellerId), any(CreateNewEffectorRequest.class) + )).willReturn(expectedResult); // when & then mvc.perform( @@ -485,8 +525,8 @@ public InstrumentControllerTest(MockMvc mvc) { CreateNewAmplifierRequest request = createAmplifierRequest(); AmplifierDto expectedResult = createAmplifierDto(2L, sellerId); given(instrumentCommandService.createNewAmplifier( - eq(sellerId), any(CreateNewAmplifierRequest.class)) - ).willReturn(expectedResult); + eq(sellerId), any(CreateNewAmplifierRequest.class) + )).willReturn(expectedResult); // when & then mvc.perform( @@ -528,8 +568,8 @@ public InstrumentControllerTest(MockMvc mvc) { CreateNewAudioEquipmentRequest request = createAudioEquipmentRequest(); AudioEquipmentDto expectedResult = createAudioEquipmentDto(2L, sellerId); given(instrumentCommandService.createNewAudioEquipment( - eq(sellerId), any(CreateNewAudioEquipmentRequest.class)) - ).willReturn(expectedResult); + eq(sellerId), any(CreateNewAudioEquipmentRequest.class) + )).willReturn(expectedResult); // when & then mvc.perform( @@ -815,11 +855,12 @@ private AddressRequest createAddressRequest() throws Exception { } private CreateNewElectricGuitarRequest createElectricGuitarRequest() throws Exception { - Constructor createNewElectricGuitarRequestConstructor = CreateNewElectricGuitarRequest.class.getDeclaredConstructor( - String.class, List.class, InstrumentProgressStatus.class, AddressRequest.class, - Short.class, Integer.class, Boolean.class, String.class, ElectricGuitarBrand.class, - ElectricGuitarModel.class, Short.class, GuitarColor.class, List.class - ); + Constructor createNewElectricGuitarRequestConstructor = + CreateNewElectricGuitarRequest.class.getDeclaredConstructor( + String.class, List.class, InstrumentProgressStatus.class, AddressRequest.class, + Short.class, Integer.class, Boolean.class, String.class, ElectricGuitarBrand.class, + ElectricGuitarModel.class, Short.class, GuitarColor.class, List.class + ); createNewElectricGuitarRequestConstructor.setAccessible(true); return createNewElectricGuitarRequestConstructor.newInstance( "Test electric guitar", @@ -957,4 +998,13 @@ private CreateNewAudioEquipmentRequest createAudioEquipmentRequest() throws Exce AudioEquipmentType.AUDIO_EQUIPMENT ); } + + private InstrumentFilterConditions createInstrumentFilterConditions() throws Exception { + Constructor instrumentFilterConditionsConstructor = + InstrumentFilterConditions.class.getDeclaredConstructor(InstrumentProgressStatus.class); + instrumentFilterConditionsConstructor.setAccessible(true); + return instrumentFilterConditionsConstructor.newInstance( + InstrumentProgressStatus.SELLING + ); + } } diff --git a/src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentQueryServiceTest.java b/src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentQueryServiceTest.java index 181839d..477150b 100644 --- a/src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentQueryServiceTest.java +++ b/src/test/java/com/ajou/hertz/unit/domain/instrument/service/InstrumentQueryServiceTest.java @@ -45,6 +45,7 @@ import com.ajou.hertz.domain.instrument.dto.EffectorDto; import com.ajou.hertz.domain.instrument.dto.ElectricGuitarDto; import com.ajou.hertz.domain.instrument.dto.InstrumentDto; +import com.ajou.hertz.domain.instrument.dto.request.InstrumentFilterConditions; import com.ajou.hertz.domain.instrument.entity.AcousticAndClassicGuitar; import com.ajou.hertz.domain.instrument.entity.Amplifier; import com.ajou.hertz.domain.instrument.entity.AudioEquipment; @@ -100,6 +101,7 @@ class InstrumentQueryServiceTest { // given int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sort = InstrumentSortOption.CREATED_BY_DESC; User user = createUser(); Page expectedResult = new PageImpl<>(List.of( @@ -107,13 +109,14 @@ class InstrumentQueryServiceTest { createElectricGuitar(2L, user), createElectricGuitar(3L, user) )); - given(instrumentRepository.findElectricGuitars(page, pageSize, sort)).willReturn(expectedResult); + given(instrumentRepository.findElectricGuitars(page, pageSize, sort, filterConditions)) + .willReturn(expectedResult); // when - Page actualResult = sut.findElectricGuitars(page, pageSize, sort); + Page actualResult = sut.findElectricGuitars(page, pageSize, sort, filterConditions); // then - then(instrumentRepository).should().findElectricGuitars(page, pageSize, sort); + then(instrumentRepository).should().findElectricGuitars(page, pageSize, sort, filterConditions); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -127,6 +130,7 @@ class InstrumentQueryServiceTest { // given int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sort = InstrumentSortOption.CREATED_BY_DESC; User user = createUser(); Page expectedResult = new PageImpl<>(List.of( @@ -134,13 +138,13 @@ class InstrumentQueryServiceTest { createBassGuitar(2L, user), createBassGuitar(3L, user) )); - given(instrumentRepository.findBassGuitars(page, pageSize, sort)).willReturn(expectedResult); + given(instrumentRepository.findBassGuitars(page, pageSize, sort, filterConditions)).willReturn(expectedResult); // when - Page actualResult = sut.findBassGuitars(page, pageSize, sort); + Page actualResult = sut.findBassGuitars(page, pageSize, sort, filterConditions); // then - then(instrumentRepository).should().findBassGuitars(page, pageSize, sort); + then(instrumentRepository).should().findBassGuitars(page, pageSize, sort, filterConditions); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -154,6 +158,7 @@ class InstrumentQueryServiceTest { // given int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sort = InstrumentSortOption.CREATED_BY_DESC; User user = createUser(); Page expectedResult = new PageImpl<>(List.of( @@ -161,13 +166,15 @@ class InstrumentQueryServiceTest { createAcousticAndClassicGuitar(2L, user), createAcousticAndClassicGuitar(3L, user) )); - given(instrumentRepository.findAcousticAndClassicGuitars(page, pageSize, sort)).willReturn(expectedResult); + given(instrumentRepository.findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions)) + .willReturn(expectedResult); // when - Page actualResult = sut.findAcousticAndClassicGuitars(page, pageSize, sort); + Page actualResult = + sut.findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions); // then - then(instrumentRepository).should().findAcousticAndClassicGuitars(page, pageSize, sort); + then(instrumentRepository).should().findAcousticAndClassicGuitars(page, pageSize, sort, filterConditions); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -181,6 +188,7 @@ class InstrumentQueryServiceTest { // given int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sort = InstrumentSortOption.CREATED_BY_DESC; User user = createUser(); Page expectedResult = new PageImpl<>(List.of( @@ -188,13 +196,13 @@ class InstrumentQueryServiceTest { createEffector(2L, user), createEffector(3L, user) )); - given(instrumentRepository.findEffectors(page, pageSize, sort)).willReturn(expectedResult); + given(instrumentRepository.findEffectors(page, pageSize, sort, filterConditions)).willReturn(expectedResult); // when - Page actualResult = sut.findEffectors(page, pageSize, sort); + Page actualResult = sut.findEffectors(page, pageSize, sort, filterConditions); // then - then(instrumentRepository).should().findEffectors(page, pageSize, sort); + then(instrumentRepository).should().findEffectors(page, pageSize, sort, filterConditions); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -208,6 +216,7 @@ class InstrumentQueryServiceTest { // given int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sort = InstrumentSortOption.CREATED_BY_DESC; User user = createUser(); Page expectedResult = new PageImpl<>(List.of( @@ -215,13 +224,13 @@ class InstrumentQueryServiceTest { createAmplifier(2L, user), createAmplifier(3L, user) )); - given(instrumentRepository.findAmplifiers(page, pageSize, sort)).willReturn(expectedResult); + given(instrumentRepository.findAmplifiers(page, pageSize, sort, filterConditions)).willReturn(expectedResult); // when - Page actualResult = sut.findAmplifiers(page, pageSize, sort); + Page actualResult = sut.findAmplifiers(page, pageSize, sort, filterConditions); // then - then(instrumentRepository).should().findAmplifiers(page, pageSize, sort); + then(instrumentRepository).should().findAmplifiers(page, pageSize, sort, filterConditions); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -235,6 +244,7 @@ class InstrumentQueryServiceTest { // given int page = 0; int pageSize = 10; + InstrumentFilterConditions filterConditions = createInstrumentFilterConditions(); InstrumentSortOption sort = InstrumentSortOption.CREATED_BY_DESC; User user = createUser(); Page expectedResult = new PageImpl<>(List.of( @@ -242,13 +252,14 @@ class InstrumentQueryServiceTest { createAudioEquipment(2L, user), createAudioEquipment(3L, user) )); - given(instrumentRepository.findAudioEquipments(page, pageSize, sort)).willReturn(expectedResult); + given(instrumentRepository.findAudioEquipments(page, pageSize, sort, filterConditions)) + .willReturn(expectedResult); // when - Page actualResult = sut.findAudioEquipments(page, pageSize, sort); + Page actualResult = sut.findAudioEquipments(page, pageSize, sort, filterConditions); // then - then(instrumentRepository).should().findAudioEquipments(page, pageSize, sort); + then(instrumentRepository).should().findAudioEquipments(page, pageSize, sort, filterConditions); verifyEveryMocksShouldHaveNoMoreInteractions(); assertThat(actualResult.getNumberOfElements()).isEqualTo(actualResult.getNumberOfElements()); assertIterableEquals( @@ -452,4 +463,11 @@ private AudioEquipment createAudioEquipment(long id, User seller) throws Excepti private User createUser() throws Exception { return createUser(1L); } + + private InstrumentFilterConditions createInstrumentFilterConditions() throws Exception { + Constructor instrumentFilterConditionsConstructor = + InstrumentFilterConditions.class.getDeclaredConstructor(); + instrumentFilterConditionsConstructor.setAccessible(true); + return instrumentFilterConditionsConstructor.newInstance(); + } }