From 10960d0c482ceee4de94a1aff523ff2b38adf314 Mon Sep 17 00:00:00 2001 From: elive7 Date: Wed, 26 Mar 2025 21:25:24 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[SCRUM-201]=20feat:=20=EB=B0=B0=EB=84=88?= =?UTF-8?q?=EC=9D=98=20=EC=8B=9C=EC=9E=91=20=EB=82=A0=EC=A7=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 배너에 시작 날짜를 추가하여, 이벤트 목록 조회시 startDate와 dueDate 사이에 있는 배너만 조회되도록 수정하였습니다. --- .../server/domain/banner/domain/Banner.java | 5 ++++ .../domain/banner/domain/BannerCreate.java | 2 ++ .../dto/request/BannerCreateRequest.java | 3 +++ .../impl/QueryDslBannerQueryRepository.java | 1 + .../banner/api/BannerControllerTest.java | 4 ++++ .../service/BannerCommandServiceTest.java | 23 +++++++++++++++++-- .../service/BannerQueryServiceTest.java | 17 ++++++++++++-- .../server/support/fixture/BannerFixture.java | 1 + 8 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/projectlyrics/server/domain/banner/domain/Banner.java b/src/main/java/com/projectlyrics/server/domain/banner/domain/Banner.java index 15fb339f..49b7cf14 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/domain/Banner.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/domain/Banner.java @@ -27,14 +27,17 @@ public class Banner extends BaseEntity { private String imageUrl; private String redirectUrl; private LocalDateTime dueDate; + private LocalDateTime startDate; private Banner( String imageUrl, String redirectUrl, + LocalDateTime startDate, LocalDateTime dueDate ) { this.imageUrl = imageUrl; this.redirectUrl = redirectUrl; + this.startDate = startDate; this.dueDate = dueDate; } @@ -42,6 +45,7 @@ public static Banner create(BannerCreate bannerCreate) { return new Banner( bannerCreate.imageUrl(), bannerCreate.redirectUrl(), + bannerCreate.startDate(), bannerCreate.dueDate() ); } @@ -51,6 +55,7 @@ public static Banner createWithId(Long id, BannerCreate bannerCreate) { id, bannerCreate.imageUrl(), bannerCreate.redirectUrl(), + bannerCreate.startDate(), bannerCreate.dueDate() ); } diff --git a/src/main/java/com/projectlyrics/server/domain/banner/domain/BannerCreate.java b/src/main/java/com/projectlyrics/server/domain/banner/domain/BannerCreate.java index 6e87ad9d..eff2b2b9 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/domain/BannerCreate.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/domain/BannerCreate.java @@ -6,12 +6,14 @@ public record BannerCreate( String imageUrl, String redirectUrl, + LocalDateTime startDate, LocalDateTime dueDate ) { public static BannerCreate of(BannerCreateRequest request) { return new BannerCreate( request.imageUrl(), request.redirectUrl(), + request.startDate() == null ? null: request.startDate().atStartOfDay(), request.dueDate() == null ? null: request.dueDate().atStartOfDay() ); } diff --git a/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java b/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java index ce548784..a9415554 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java @@ -7,6 +7,9 @@ public record BannerCreateRequest( String imageUrl, String redirectUrl, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") + LocalDate startDate, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") LocalDate dueDate + ) { } diff --git a/src/main/java/com/projectlyrics/server/domain/banner/repository/impl/QueryDslBannerQueryRepository.java b/src/main/java/com/projectlyrics/server/domain/banner/repository/impl/QueryDslBannerQueryRepository.java index 130aae97..6f12750a 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/repository/impl/QueryDslBannerQueryRepository.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/repository/impl/QueryDslBannerQueryRepository.java @@ -34,6 +34,7 @@ public List findRecentBanners(int size) { return jpaQueryFactory .selectFrom(banner) .where( + banner.startDate.isNull().or(banner.startDate.before(LocalDateTime.now())), banner.dueDate.isNull().or(banner.dueDate.after(LocalDateTime.now())), banner.deletedAt.isNull() ) diff --git a/src/test/java/com/projectlyrics/server/domain/banner/api/BannerControllerTest.java b/src/test/java/com/projectlyrics/server/domain/banner/api/BannerControllerTest.java index c7798f1f..122a8cf5 100644 --- a/src/test/java/com/projectlyrics/server/domain/banner/api/BannerControllerTest.java +++ b/src/test/java/com/projectlyrics/server/domain/banner/api/BannerControllerTest.java @@ -32,6 +32,7 @@ public class BannerControllerTest extends RestDocsTest { BannerCreateRequest request = new BannerCreateRequest( "imageUrl", "redirectUrl", + LocalDate.now(), LocalDate.now() ); @@ -55,6 +56,9 @@ private RestDocumentationResultHandler getCreateBannerDocument() { .description("이미지 URL"), fieldWithPath("redirectUrl").type(JsonFieldType.STRING) .description("리다이렉트 URL"), + fieldWithPath("startDate").type(JsonFieldType.STRING) + .description("배너 노출 시작일") + .optional(), fieldWithPath("dueDate").type(JsonFieldType.STRING) .description("배너 노출 마감일") .optional() diff --git a/src/test/java/com/projectlyrics/server/domain/banner/service/BannerCommandServiceTest.java b/src/test/java/com/projectlyrics/server/domain/banner/service/BannerCommandServiceTest.java index f63baf85..8f7d6723 100644 --- a/src/test/java/com/projectlyrics/server/domain/banner/service/BannerCommandServiceTest.java +++ b/src/test/java/com/projectlyrics/server/domain/banner/service/BannerCommandServiceTest.java @@ -26,7 +26,7 @@ public class BannerCommandServiceTest extends IntegrationTest { @Test void 배너를_발행해야_한다() { // given - BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now()); + BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now(), LocalDate.now()); // when Banner banner = sut.create(request); @@ -40,10 +40,28 @@ public class BannerCommandServiceTest extends IntegrationTest { ); } + @Test + void 시작일자_없이도_배너를_발행해야_한다() { + // given + BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", null, LocalDate.now()); + + // when + Banner banner = sut.create(request); + + // then + Banner result = bannerQueryRepository.findById(banner.getId()); + assertAll( + () -> assertThat(result.getImageUrl()).isEqualTo(request.imageUrl()), + () -> assertThat(result.getRedirectUrl()).isEqualTo(request.redirectUrl()), + () -> assertThat(result.getStartDate()).isNull(), + () -> assertThat(result.getDueDate()).isEqualTo(request.dueDate().atStartOfDay()) + ); + } + @Test void 마감일자_없이도_배너를_발행해야_한다() { // given - BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", null); + BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now(), null); // when Banner banner = sut.create(request); @@ -53,6 +71,7 @@ public class BannerCommandServiceTest extends IntegrationTest { assertAll( () -> assertThat(result.getImageUrl()).isEqualTo(request.imageUrl()), () -> assertThat(result.getRedirectUrl()).isEqualTo(request.redirectUrl()), + () -> assertThat(result.getStartDate()).isEqualTo(request.startDate().atStartOfDay()), () -> assertThat(result.getDueDate()).isNull() ); } diff --git a/src/test/java/com/projectlyrics/server/domain/banner/service/BannerQueryServiceTest.java b/src/test/java/com/projectlyrics/server/domain/banner/service/BannerQueryServiceTest.java index 59f132be..8ebc3736 100644 --- a/src/test/java/com/projectlyrics/server/domain/banner/service/BannerQueryServiceTest.java +++ b/src/test/java/com/projectlyrics/server/domain/banner/service/BannerQueryServiceTest.java @@ -38,6 +38,7 @@ public class BannerQueryServiceTest extends IntegrationTest { private BannerCreateRequest activeBannerCreateRequest; private BannerCreateRequest expiredBannerCreateRequest; + private BannerCreateRequest upcomingBannerCreateRequest; private BannerCreateRequest bannerCreateRequest; @BeforeEach @@ -46,16 +47,25 @@ void setUp() { activeBannerCreateRequest = new BannerCreateRequest( "imageUrl", "redirectUrl", + LocalDate.now(), LocalDate.now().plusDays(1) ); expiredBannerCreateRequest = new BannerCreateRequest( "imageUrl", "redirectUrl", + LocalDate.now().minusDays(2), LocalDate.now().minusDays(1) ); - bannerCreateRequest = new BannerCreateRequest( + upcomingBannerCreateRequest = new BannerCreateRequest( "imageUrl", "redirectUrl", + LocalDate.now().plusDays(1), + LocalDate.now().plusDays(2) + ); + bannerCreateRequest = new BannerCreateRequest( + "imageUrl", + "redirectUrl", + null, null ); } @@ -105,7 +115,7 @@ void setUp() { } @Test - void 배너_리스트_조회시_마감기한이_이미_지난_배너는_제외해야_한다() { + void 배너_리스트_조회시_시작기한이_남았거나_마감기한이_이미_지난_배너는_제외해야_한다() { // given List banners = new ArrayList<>(); for (int i=0; i<3; i++) { @@ -117,6 +127,9 @@ void setUp() { for (int i=0; i<5; i++) { banners.add(bannerCommandRepository.save(Banner.create(BannerCreate.of(expiredBannerCreateRequest)))); } + for (int i=0; i<3; i++) { + banners.add(bannerCommandRepository.save(Banner.create(BannerCreate.of(upcomingBannerCreateRequest)))); + } // when List result = sut.getRecentBanners(10); diff --git a/src/test/java/com/projectlyrics/server/support/fixture/BannerFixture.java b/src/test/java/com/projectlyrics/server/support/fixture/BannerFixture.java index a7e6e103..4fb21098 100644 --- a/src/test/java/com/projectlyrics/server/support/fixture/BannerFixture.java +++ b/src/test/java/com/projectlyrics/server/support/fixture/BannerFixture.java @@ -17,6 +17,7 @@ public static Banner create() { new BannerCreate( "imageUrl", "redirectUrl", + LocalDate.now().minusDays(1).atTime(23, 59, 59), LocalDate.now().plusDays(1).atTime(23, 59, 59) ) ); From f6483cd77c5a7d7903d5b9f32f785b9cafee836a Mon Sep 17 00:00:00 2001 From: elive7 Date: Wed, 26 Mar 2025 22:00:25 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[SCRUM-201]=20feat:=20=EB=B0=B0=EB=84=88=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=8B=9C=20=ED=95=84=EC=9A=94=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EA=B8=B0=EB=B3=B8=20=EB=B0=B0=EB=84=88=20?= =?UTF-8?q?=EC=88=A8=EA=B8=B8=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 앞에서 정의한 startDate를 이용하여, 이벤트 배너의 기간이 끝나기 전까지는 기본 배너(또는 특정 배너)가 보이지 않도록 설정했습니다.이벤트 배너의 기간이 끝나면 기본 배너가 다시 노출되게 됩니다. --- .../server/domain/banner/domain/Banner.java | 4 +++- .../banner/dto/request/BannerCreateRequest.java | 4 +++- .../impl/QueryDslBannerQueryRepository.java | 2 +- .../domain/banner/service/BannerCommandService.java | 11 +++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/projectlyrics/server/domain/banner/domain/Banner.java b/src/main/java/com/projectlyrics/server/domain/banner/domain/Banner.java index 49b7cf14..6120c1f0 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/domain/Banner.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/domain/Banner.java @@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; @Getter @Entity @@ -26,8 +27,9 @@ public class Banner extends BaseEntity { private String imageUrl; private String redirectUrl; - private LocalDateTime dueDate; + @Setter private LocalDateTime startDate; + private LocalDateTime dueDate; private Banner( String imageUrl, diff --git a/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java b/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java index a9415554..a5f270f4 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java @@ -9,7 +9,9 @@ public record BannerCreateRequest( @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") LocalDate startDate, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") - LocalDate dueDate + LocalDate dueDate, + boolean hide, + Long hiddenBannerId ) { } diff --git a/src/main/java/com/projectlyrics/server/domain/banner/repository/impl/QueryDslBannerQueryRepository.java b/src/main/java/com/projectlyrics/server/domain/banner/repository/impl/QueryDslBannerQueryRepository.java index 6f12750a..d9e723b0 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/repository/impl/QueryDslBannerQueryRepository.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/repository/impl/QueryDslBannerQueryRepository.java @@ -20,7 +20,7 @@ public class QueryDslBannerQueryRepository implements BannerQueryRepository { @Override public Banner findById(Long id) { - return Optional.of( + return Optional.ofNullable( jpaQueryFactory .selectFrom(banner) .where(banner.id.eq(id), diff --git a/src/main/java/com/projectlyrics/server/domain/banner/service/BannerCommandService.java b/src/main/java/com/projectlyrics/server/domain/banner/service/BannerCommandService.java index 5370c960..aed0ff7b 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/service/BannerCommandService.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/service/BannerCommandService.java @@ -4,7 +4,9 @@ import com.projectlyrics.server.domain.banner.domain.BannerCreate; import com.projectlyrics.server.domain.banner.dto.request.BannerCreateRequest; import com.projectlyrics.server.domain.banner.repository.BannerCommandRepository; +import com.projectlyrics.server.domain.banner.repository.BannerQueryRepository; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -13,9 +15,18 @@ @RequiredArgsConstructor public class BannerCommandService { + private final BannerQueryRepository bannerQueryRepository; private final BannerCommandRepository bannerCommandRepository; + @Value("${default_banner_id}") + private Long defaultBannerId; + public Banner create(BannerCreateRequest request) { + if (request.hide()) { + Long hiddenBannerId = request.hiddenBannerId() == null ? defaultBannerId : request.hiddenBannerId(); + Banner hiddenBanner = bannerQueryRepository.findById(hiddenBannerId); + hiddenBanner.setStartDate(request.dueDate() == null ? null : request.dueDate().atStartOfDay()); + } return bannerCommandRepository.save(Banner.create(BannerCreate.of(request))); } } From 5c059773cb7fdb7c0cde1cafa9006a65e83d34ea Mon Sep 17 00:00:00 2001 From: elive7 Date: Wed, 26 Mar 2025 22:07:41 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[SCRUM-201]=20refactor:=20boolean=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20hide=20->=20hideOther=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/domain/banner/dto/request/BannerCreateRequest.java | 2 +- .../server/domain/banner/service/BannerCommandService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java b/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java index a5f270f4..7e889902 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/dto/request/BannerCreateRequest.java @@ -10,7 +10,7 @@ public record BannerCreateRequest( LocalDate startDate, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") LocalDate dueDate, - boolean hide, + boolean hideOther, Long hiddenBannerId ) { diff --git a/src/main/java/com/projectlyrics/server/domain/banner/service/BannerCommandService.java b/src/main/java/com/projectlyrics/server/domain/banner/service/BannerCommandService.java index aed0ff7b..ce1ae15d 100644 --- a/src/main/java/com/projectlyrics/server/domain/banner/service/BannerCommandService.java +++ b/src/main/java/com/projectlyrics/server/domain/banner/service/BannerCommandService.java @@ -22,7 +22,7 @@ public class BannerCommandService { private Long defaultBannerId; public Banner create(BannerCreateRequest request) { - if (request.hide()) { + if (request.hideOther()) { Long hiddenBannerId = request.hiddenBannerId() == null ? defaultBannerId : request.hiddenBannerId(); Banner hiddenBanner = bannerQueryRepository.findById(hiddenBannerId); hiddenBanner.setStartDate(request.dueDate() == null ? null : request.dueDate().atStartOfDay()); From ce4a0e041960b550b0f216f82cca1a7c940bf122 Mon Sep 17 00:00:00 2001 From: elive7 Date: Wed, 26 Mar 2025 22:36:49 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[SCRUM-201]=20test:=20=EB=B0=B0=EB=84=88=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EA=B3=BC=20=EA=B4=80=EB=A0=A8=EB=90=9C=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BannerCreateRequest의 형태가 바뀐 관계로 test도 수정해주었습니다. - 또한 hideOthher가 true일 때 기존 배너의 시작일이 바뀌는지도 테스트를 통해 확인해보았습니다. --- .../banner/api/BannerControllerTest.java | 9 ++++- .../service/BannerCommandServiceTest.java | 40 +++++++++++++++++-- .../service/BannerQueryServiceTest.java | 19 +++++---- src/test/resources/application.yml | 2 + 4 files changed, 58 insertions(+), 12 deletions(-) diff --git a/src/test/java/com/projectlyrics/server/domain/banner/api/BannerControllerTest.java b/src/test/java/com/projectlyrics/server/domain/banner/api/BannerControllerTest.java index 122a8cf5..968d35ec 100644 --- a/src/test/java/com/projectlyrics/server/domain/banner/api/BannerControllerTest.java +++ b/src/test/java/com/projectlyrics/server/domain/banner/api/BannerControllerTest.java @@ -33,7 +33,9 @@ public class BannerControllerTest extends RestDocsTest { "imageUrl", "redirectUrl", LocalDate.now(), - LocalDate.now() + LocalDate.now(), + false, + null ); // when, then @@ -61,6 +63,11 @@ private RestDocumentationResultHandler getCreateBannerDocument() { .optional(), fieldWithPath("dueDate").type(JsonFieldType.STRING) .description("배너 노출 마감일") + .optional(), + fieldWithPath("hideOther").type(JsonFieldType.BOOLEAN) + .description("다른 배너를 가릴지 여부"), + fieldWithPath("hiddenBannerId").type(JsonFieldType.NUMBER) + .description("가릴 배너 Id (hideOther가 true일 때만 필요. 또한 입력하지 않을시 yml값 적용됨)") .optional() ) .requestSchema(Schema.schema("Create Banner Request")) diff --git a/src/test/java/com/projectlyrics/server/domain/banner/service/BannerCommandServiceTest.java b/src/test/java/com/projectlyrics/server/domain/banner/service/BannerCommandServiceTest.java index 8f7d6723..740d19e3 100644 --- a/src/test/java/com/projectlyrics/server/domain/banner/service/BannerCommandServiceTest.java +++ b/src/test/java/com/projectlyrics/server/domain/banner/service/BannerCommandServiceTest.java @@ -26,7 +26,7 @@ public class BannerCommandServiceTest extends IntegrationTest { @Test void 배너를_발행해야_한다() { // given - BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now(), LocalDate.now()); + BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now(), LocalDate.now(), false, null); // when Banner banner = sut.create(request); @@ -36,14 +36,48 @@ public class BannerCommandServiceTest extends IntegrationTest { assertAll( () -> assertThat(result.getImageUrl()).isEqualTo(request.imageUrl()), () -> assertThat(result.getRedirectUrl()).isEqualTo(request.redirectUrl()), + () -> assertThat(result.getStartDate()).isEqualTo(request.startDate().atStartOfDay()), () -> assertThat(result.getDueDate()).isEqualTo(request.dueDate().atStartOfDay()) ); } + @Test + void 배너_발행시_필요에_따라_다른_배너의_startDate를_바꿀_수_있어야_한다() { + // given + Banner hiddenBanner = sut.create(new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now().minusDays(2), LocalDate.now(), false, null)); + BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now(), LocalDate.now().plusDays(1), true, hiddenBanner.getId()); + + // when + sut.create(request); + + // then + Banner result = bannerQueryRepository.findById(hiddenBanner.getId()); + assertAll( + () -> assertThat(result.getStartDate()).isEqualTo(request.dueDate().atStartOfDay()) + ); + } + + @Test + void 배너_발행시_hiddenBannerId가_주어지지_않으면_기본_배너의_startDate를_변경해야_한다() { + // given + // yml에 기본 배너의 id 1로 지정 + sut.create(new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now().minusDays(2), LocalDate.now(), false, null)); + BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now(), LocalDate.now().plusDays(1), true, null); + + // when + sut.create(request); + + // then + Banner result = bannerQueryRepository.findById(1L); + assertAll( + () -> assertThat(result.getStartDate()).isEqualTo(request.dueDate().atStartOfDay()) + ); + } + @Test void 시작일자_없이도_배너를_발행해야_한다() { // given - BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", null, LocalDate.now()); + BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", null, LocalDate.now(), false, null); // when Banner banner = sut.create(request); @@ -61,7 +95,7 @@ public class BannerCommandServiceTest extends IntegrationTest { @Test void 마감일자_없이도_배너를_발행해야_한다() { // given - BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now(), null); + BannerCreateRequest request = new BannerCreateRequest("imageUrl", "redirectUrl", LocalDate.now(), null, false, null); // when Banner banner = sut.create(request); diff --git a/src/test/java/com/projectlyrics/server/domain/banner/service/BannerQueryServiceTest.java b/src/test/java/com/projectlyrics/server/domain/banner/service/BannerQueryServiceTest.java index 8ebc3736..19cc9c0f 100644 --- a/src/test/java/com/projectlyrics/server/domain/banner/service/BannerQueryServiceTest.java +++ b/src/test/java/com/projectlyrics/server/domain/banner/service/BannerQueryServiceTest.java @@ -9,10 +9,8 @@ import com.projectlyrics.server.domain.banner.dto.response.BannerGetResponse; import com.projectlyrics.server.domain.banner.repository.BannerCommandRepository; import com.projectlyrics.server.domain.banner.repository.BannerQueryRepository; -import com.projectlyrics.server.domain.user.entity.User; import com.projectlyrics.server.domain.user.repository.UserCommandRepository; import com.projectlyrics.server.support.IntegrationTest; -import com.projectlyrics.server.support.fixture.UserFixture; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -34,8 +32,6 @@ public class BannerQueryServiceTest extends IntegrationTest { @Autowired BannerQueryService sut; - private User user; - private BannerCreateRequest activeBannerCreateRequest; private BannerCreateRequest expiredBannerCreateRequest; private BannerCreateRequest upcomingBannerCreateRequest; @@ -43,29 +39,36 @@ public class BannerQueryServiceTest extends IntegrationTest { @BeforeEach void setUp() { - user = userCommandRepository.save(UserFixture.create()); activeBannerCreateRequest = new BannerCreateRequest( "imageUrl", "redirectUrl", LocalDate.now(), - LocalDate.now().plusDays(1) + LocalDate.now().plusDays(1), + false, + null ); expiredBannerCreateRequest = new BannerCreateRequest( "imageUrl", "redirectUrl", LocalDate.now().minusDays(2), - LocalDate.now().minusDays(1) + LocalDate.now().minusDays(1), + false, + null ); upcomingBannerCreateRequest = new BannerCreateRequest( "imageUrl", "redirectUrl", LocalDate.now().plusDays(1), - LocalDate.now().plusDays(2) + LocalDate.now().plusDays(2), + false, + null ); bannerCreateRequest = new BannerCreateRequest( "imageUrl", "redirectUrl", null, + null, + false, null ); } diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 9a55c1e9..db34d3e1 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -35,6 +35,8 @@ admin: 1 version: 0.0.1 +default_banner_id : 1 + search: api: host: host